`
m635674608
  • 浏览: 4933186 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

NStruts

    博客分类:
  • c#
 
阅读更多

 如今,NHibernate有了,NSpring有了,唯独少了个NStruts。也许是因为.netWebform开发模式吧,NStruts对于.net来说没有多大的实用价值,webform已经很struts了。不过,我还是觉得struts的开发模式用起来顺手一点。

  当一个页面的数据项过多的时候,假如有几十个的文本输入框,在后台获取它们的数据实在是件相当痛苦的事情。如果能像struts那样,直接发送个请求就OK了,那该有多好。Webform和struts各有优点,如果能在做项目中,将起到一个互补的作用。

  基于以上原因,我设计了一个.net版的struts,名字就叫NStruts。这是一个开源的项目,支持的朋友希望也加进这个项目来,共同完善它。我设计的思路是,将webform的优点和struts的优点相结合,形成一个独特的struts。

发布.net版的struts---nstruts1.0

  现在以上功能除了依赖注入拦截器没有做好,其它功能都已经做好了。

  NStruts由三个核心类构造,Configuration, Dispatcher, ActionSupport。

  Configuration:Configuration类负责获取获取配置文件的信息

  Dispatcher:Dispatcher类负责请求Action,拦截Action,并执行Action内的方法等。

  ActionSupport:ActionSupport类是抽象类,提供了一些方法的封装,Action类可以继承该类以获得更多的功能。

  首先看一下使用示例吧

  页面的代码如下:

Default.ASPx
<body>
  <form id="form1" runat="server">
  <div>
  用户名:<input name="UserName" type="text"></input><br />
  密码:<asp:TextBox ID="Password" runat="server"></asp:TextBox><br />
  <asp:Button ID="Login" runat="server" Text="登录" onclick="Login_Click" />
    <asp:Button ID="Other" runat="server" Text="Other" onclick="Other_Click" />
    <asp:Button ID="TypeButton" runat="server" Text="Type"
      onclick="TypeButton_Click" />
    <asp:Label ID="Label1" runat="server"></asp:Label>
  </div>
  </form>
</body>

 

表单控件可以是普通的html标签,而且不需要设置runat="server"哦。

 

  先定义一个Action类:

 

TypeAction
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
///TypeAction 的摘要说明
/// </summary>
public class TypeAction
{
  public TypeAction()
  {
  }
  public string Execute()
  {
    if (UserName == "demo" && Password == "demo")
    {
      Age = 22;
      return "success";
    }
    return "error";
  }
  public string UserName { get; set; }
  public string Password { get; set; }
  public int Age { get; set; }
}

 

  TypeButton在代码:

 

TypeButton_Click
  /// <summary>
  /// 使用Type方法请求Action,不需要配置文件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  protected void TypeButton_Click(object sender, EventArgs e)
  {
    string result = Dispatcher.Send(this, typeof(TypeAction));
    if (result == "success")
    {
      Page.Response.Redirect("Default4.ASPx");
    }
  }

 

通过Type传值可以不需要配置文件,使用起来比较简单。

 

  NStruts是支持配置文件的,而且还支持多个配置文件,可以避免了单个文件带来的代码过长问题,也能起到团队协作的作用。使用配置文件的好处是很多的,能够更充分地发挥NStruts的功能,虽然会麻烦了点。NStruts的配置文件格式如下:

 

nstruts
<?XML version="1.0" encoding="utf-8" ?>
<nstruts>
 <!--设置是否自动刷新配置文件信息-->
 <reflesh auto="true"/>
 <!--包含其它配置文件-->
 <includes>
  <include file="pages/nstruts.XML"/>
 </includes>
 <!--定义Action映射-->
 <actions>
  <action name="Other" assembly="TestAction" class="TestAction.OtherAction">
   <result name="success">Default3.ASPx</result>
  </action>
 </actions>
 <!--定义全局跳转-->
 <global-results>
  <result name="error">Default2.aspx</result>
 </global-results>
</nstruts>

 

  如果使用配置文件,则需要创建一个默认的配置文件,并把它保存在Web应用程序的根目录下,配置文件的名字为:nstruts.xml。

 

  如果有多个配置文件,可在include结点添加。在执行Action的Execute后,如果在result结点中没有相应的信息,则返回到方法调用处。

 

  如下演示:

 

LoginAction
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestAction
{
  /// <summary>
  /// 普通的Action类
  /// </summary>
  public class LoginAction
  {
    public string Execute()
    {
      if (UserName == "demo" && Password == "demo")
      {
        Age = 22;
        return "success";
      }
      return "error";
    }
    public string UserName { get; set; }
    public string Password { get; set; }
    public int Age { get; set; }
  }
}
  
Login_Click
  /// <summary>
  /// 使用普通的类作为Action
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  protected void Login_Click(object sender, EventArgs e)
  {
    string result = Dispatcher.Send(this, "Login");
    if (result == "success")
    {
      ValueTable valueTable = Page.Items["ValueTable"] as ValueTable;
      Label1.Text = "UserName:" + valueTable["UserName"] + ",Password:" + valueTable["Password"] + ",Age:" + valueTable["Age"];

 

 

由上面的代码可以看到,Action可以只是一个普通的C#类。

 

  继承自ActionSupport类能获得更多的功能,如表单数据验证:

 

OtherAction
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NStruts.Pride;
namespace TestAction
{
  public class OtherAction : ActionSupport
  {
    public string UserName { get; set; }
    public string Password { get; set; }
    public int Age { get; set; }
    public override string Execute()
    {
      if (UserName == "demo" && Password == "demo")
      {
        Age = 22;
        AddSession("UserName", "demo");
        return Success;
      }
      return Error;
    }
    public override void Validate()
    {
      if (String.IsNullOrEmpty(UserName) || String.IsNullOrEmpty(Password))
      {
        AddFieldError("LoginInfo", "LoginInfoRequired");
      }
    }
  }
}
  
Other_Click
  /// <summary>
  /// 使用继承ActionSupport的类
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  protected void Other_Click(object sender, EventArgs e)
  {
    string result = Dispatcher.Send(this, "Other");
    if (result == "input")
    {
      ValueTable valueTable = Page.Items["ValueTable"] as ValueTable;
      FieldErrorTable fieldErrorTable = valueTable["FieldErrorTable"] as FieldErrorTable;
      Label1.Text = fieldErrorTable["LoginInfo"];
    }
  }

 

 

 

  可以看到,Action的属性值将会保存在Page.Items的ValueTable中返回到方法调用页面,表单验证的错误信息保存在ValueTable的FieldErrorTable中。

 

http://www.cnblogs.com/weihengblogs/archive/2013/01/28/2880518.html

 

分享到:
评论

相关推荐

    nspring+nhibernate帮助文档

    nspring+nhibernate帮助文档,用于.NET的spring和hibernate框架,期待nstruts的出现

    智慧学院智能化项目规划设计方案PPT(45页).pptx

    智慧学院智能化项目规划设计方案PPT(45页).pptx

    AO工艺设计计算(全).xls

    污水处理计算书

    ASP+ACCESS动态网站设计与制作(源代码+设计说明书).zip

    ASP+ACCESS动态网站设计与制作(源代码+设计说明书).zip

    基于matlab实现的二维渗流代码,用于模拟在二维条件下,格点所受碰撞的次数.rar

    基于matlab实现的二维渗流代码,用于模拟在二维条件下,格点所受碰撞的次数.rar

    基于matlab实现可实现脉冲编码调制,模拟信号的数字传输:抽样、量化、编码.rar

    基于matlab实现可实现脉冲编码调制,模拟信号的数字传输:抽样、量化、编码.rar

    ASP+access网上购物系统(设计说明书+源代码).zip

    ASP+access网上购物系统(设计说明书+源代码).zip

    Screenshot_20240503_054519.jpg

    Screenshot_20240503_054519.jpg

    node-v12.17.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ASP+ACCESS软件信息发布系统设计(源代码+设计说明书+调研报告+任务书).zip

    ASP+ACCESS软件信息发布系统设计(源代码+设计说明书+调研报告+任务书).zip

    2024年金属氧化物避雷器行业分析报告.pptx

    行业报告

    ASP+SQL学生排课管理系统(源代码+设计说明书).zip

    ASP+SQL学生排课管理系统(源代码+设计说明书).zip

    node-v10.18.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    The Experiment 2 of Engineering Electromagnetics.pdf

    The Experiment 2 of Engineering Electromagnetics.pdf

    2003-2022年上市公司管理层权力强度综合指标含原始数据+do代码(excel+dta)

    2003-2022年上市公司管理层权力强度综合指标含原始数据+do代码(exce l+dta) 作为公司内部监督的一个重要方面,有效的内部控制能够减轻管理层与股东 之间的代理冲突,进一步保护投资者利益; 而作为公司外部监督的一个重要内容, 分析 师跟踪有助于降低管理层与外部投资者之间的信息不对称程度, 提高公司的可信度。这两 者都可以在一定程度上有效约束管理层的机会主义行为。 1、数据时间:2000-20 22年 2、数据文件:包含原始数据、do代码、参考文献及最终结果 3、数据格式: excel+dta格式 4、数据说明: ①剔除了ST、*ST、金融业、资不抵债、 关键数据缺失的观测值; ②参考了郑珊珊(2019)和刘剑民(2019)的方法,运 用主成分分析方法,构建了2个管理层权力强度的指标。 ③Powe_郑珊珊:依据两职 合一、董事会规模、 内部董事比例、股权分散度、管理层持股,运用主成分分析方法构建 而成。 ④Powe_刘剑民:依据两职合一、董事会规模、 内部董事比例、总经理任期 、管理层持股,运用主成分分析方法构建而成。 5、数据预览: 数据文件: do代码 : 运行结果:

    基于matlab实现的进行渗流力学的s-w曲线,压降漏斗,相渗曲线的作图.rar

    基于matlab实现的进行渗流力学的s-w曲线,压降漏斗,相渗曲线的作图.rar

    基于地理格网的时空知识图谱python源码+详细说明.zip

    如何运行及使用 运行 用eclipse直接clone本项目,GettingStarted目录下的GettingStarted类可以直接运行,查看结果 同时jar目录下有生成的jar包,下载后也可以直接调用 使用 初次使用流程:新建知识图谱加载知识图谱添加数据添加或查询 非初次:加载知识图谱添加或查询 Geokg包中主要类与方法介绍 KnowledgeGraph类 创建知识图谱方法 调用创建图谱方法,则会在指定目录创建数据库,一个目录下只能创建一个知识图谱,否则程序报错并强制退出 创建知识图谱的方法有两个,都为静态方法,可以通过类名KnowledgeGraph直接调用,分别为: //@param iGridLevel 要构建的知识图谱网格的等级,取值范围为0-20,小于0取自动取0,大于20自动取20 //@param strDataStore 自定义的存储知识图谱的本地目录 public static boolean createKnowledgeGraph(int iGridLevel,String strDataStore){} //@param iGri

    基于matlab实现的应用于配电网重构的改进二进制粒子群算法,能够取得比较理想的效果.rar

    基于matlab实现的应用于配电网重构的改进二进制粒子群算法,能够取得比较理想的效果.rar

    node-v12.22.6-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics