对于表单提交数据给action时候,可以简单的用setter与getter函数实现值的传递。

例如在jsp里有这么个form:

<s:form action="login">

< s:textfield name="name" key="user"/>

< s:textfield name="pass" key="pass"/>

< s:submit key="logins" value="submit"/>

</s:form>

那么在action里面只要有相应的setName(String name) setPass(String pass) 方法则提交的时候就可以自动调用setter方法。这个是基于struts2的反射机制。这个操作是由params拦截器完成的,params对应的类是com.opensymphony.xwork2.interceptor.ParametersInterceptor。由于params已经在defaultStack中定义,因此,在未引用拦截器的<action>中是会自动引用params的,如下面的配置代码,在访问login动作时,Struts2是会自动执行相应的setter方法的。

首先,当表格提交后,会检查处理类中是否由相应的setter,如textfield的name为“name”那么对应的setter就应该为“setName",(命名规范下面再细说)。如果有则调用。而对于多个提交数据量来说如果设置相应的setter那么会使得action过于臃肿。可以通过类来实现。

通过定义一个user类,包含name,pass属性,然后再用setUser(user users)方法来传入user类。action中只要包含一个user类就行了。

对应的jsp的form则改为对user属性的赋值。

<s:form action="login">

< s:textfield name="user.name" key="user"/>

< s:textfield name="user.pass" key="pass"/>

< s:submit key="logins" value="submit"/>

</s:form>

还有可以使用modelDriven机制。

setter与getter函数的命名规则:

jsp里name的首字母小写,对应的setter则需要将首字母变为大写,然后在前面加set就是了。如:jsp中name为“login”那么setter为“setLogin”。如果首字母大写,次子母也大写,那么setter只要再name前面加set。如:jsp为:“LOgin"那setter为:”setLOgin"

如果首字母大写,次子母小写,这样是不允许的。至于为什么,只能说不知道,那个反射就这么设置了``学艺不精啦。

还有必须要注意的是setter方法必须为public。否则也无法找到相应函数的。

文章原文地址:

         

 

form与action之setter与getter(转)的更多相关文章

  1. 【原】iOS 同时重写setter和getter时候报错:Use of undeclared identifier '_name';did you mean 'name'

    写了那么多的代码了,平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断.然后有时候根据 ...

  2. ES5 的 setter 和 getter

    有两种方式使用 setter 和 getter 1. set/get var person = { _name: '', get name() { return this._name }, set n ...

  3. ASP.NET MVC程序中动态修改form的Action值

    在练习ASP.NET MVC时,为了实现一个小功能,POST数据至服务器执行时,需要动态修改form的action值. 下面Insus.NET列举一个例子来演示它.让它简单,明白易了解. 你可以在控制 ...

  4. OC中实例变量可见度、setter、getter方法和自定义初始化方法

    在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特 ...

  5. ios特性访问器方法(setter和getter)

    Employee.h @interface Employee:NSObject { int _employeeNumber; NSString *_name; Employee*_supervisit ...

  6. 如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

    如果将synthesize省略,并且我们自己实现setter和getter方法时,系统就不会生成对应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...

  7. 【Java基础】setter与getter方法

    //下面代码实现设置和获取学生姓名和成绩. class lesson5homework { public static void main(String[] args) { TestCode TC=n ...

  8. 假设将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

    假设将synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...

  9. 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法

    假设synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和g ...

随机推荐

  1. windows phone 之手势识别(Manipulation)

    在Windows Phone 7的多触摸屏上可以检测到至少四根同时存在的手指,并且一起操作使触摸屏充分发挥效果. 在silverlight开发中通过事件来实现触屏事件的检测,包括低级别的和高级别的接口 ...

  2. 从内部剖析C#集合之HashTable

    计划写几篇文章专门介绍HashTable,Dictionary,HashSet,SortedList,List 等集合对象,从内部剖析原理,以便在实际应用中有针对性的选择使用. 这篇文章先介绍Hash ...

  3. PHP 关于 $GLOBALS['HTTP_RAW_POST_DATA']

    PHP 关于 $GLOBALS['HTTP_RAW_POST_DATA'] 最近用微信api写接口时用到了这个,记录,下面转载开始: —————————— 这是手册里写的 总是产生变量包含有原始的 P ...

  4. 在Docker下部署Nginx

    在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...

  5. OpenCV for c++Builder

    整理日: 20154/6 Borland C++BuilderでOpenCVを使う 確認 Turbo C++ 2007/03 1. ダウンロード&インストール http://sourcefor ...

  6. 随时可以给doT模板传任何你想要的值

    我以前一直以为只有传给后台的数据才能用doT模板写入, 其实,随时可以把本地处理的数据,仅仅的一个变量,改头换面成一个it关键字下面的属性. 方法就是在tpl中给它赋值. 要注意的是,首先tpl中的属 ...

  7. Musical Theme

    poj1743:http://poj.org/problem?id=1743 题意:题意抽象出来就是给你一个序列,然后找一个长度不少于5的没有重复的等差数列. 题解:每相邻的两个数做差,然后转化成求字 ...

  8. iOS获取图片的Base64String,兼容Android,java,web,jpg(jpeg),png

    呃呃呃……需求的来源又是同学,对!又是! 废话不哆嗦,怎么把一张图在iOS上转一个Base64String出来,稍微了解的,或者随便搜一下,都能搞定一大堆,但是!!!! 自己(iOS)转自己用,完全没 ...

  9. Learning WCF Chapter 3 Bindings One-Way and Duplex Communication

    One-Way and Duplex Communication A message exchange pattern describes the way messages are sent betw ...

  10. 纯css切换左侧菜单

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...