form与action之setter与getter(转)
对于表单提交数据给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(转)的更多相关文章
- 【原】iOS 同时重写setter和getter时候报错:Use of undeclared identifier '_name';did you mean 'name'
写了那么多的代码了,平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断.然后有时候根据 ...
- ES5 的 setter 和 getter
有两种方式使用 setter 和 getter 1. set/get var person = { _name: '', get name() { return this._name }, set n ...
- ASP.NET MVC程序中动态修改form的Action值
在练习ASP.NET MVC时,为了实现一个小功能,POST数据至服务器执行时,需要动态修改form的action值. 下面Insus.NET列举一个例子来演示它.让它简单,明白易了解. 你可以在控制 ...
- OC中实例变量可见度、setter、getter方法和自定义初始化方法
在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特 ...
- ios特性访问器方法(setter和getter)
Employee.h @interface Employee:NSObject { int _employeeNumber; NSString *_name; Employee*_supervisit ...
- 如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法
如果将synthesize省略,并且我们自己实现setter和getter方法时,系统就不会生成对应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...
- 【Java基础】setter与getter方法
//下面代码实现设置和获取学生姓名和成绩. class lesson5homework { public static void main(String[] args) { TestCode TC=n ...
- 假设将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法
假设将synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...
- 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法
假设synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和g ...
随机推荐
- JS中的 this
JS中的 this 变化多端,似乎难以捉摸,但实际上对 this 的解读,还是有一定规律的. 分析this,该如何下手呢?下面有一个函数 function show(){ alert(this); } ...
- Dreamweaver安装jQuery插件jQuery_API.mxp
要让Dreamweaver支持jQuery自动提示代码功能,方法很简单,下载一个插件—jQuery_API.mxp[点击下载]. 在Dreamweaver里依次选择“命令” -> “扩展管理” ...
- 控制器view加载
出自李明杰讲课视频
- git 基础命令
1.git init git 初始化仓库 2.git add . git 添加全部文件 3.git add xxx.txt git 添加单独文件 4.git commit -m "提交的 ...
- spm使用之七不用seajs改用headjs起步
这几天在看phpwind官方网站, 他们的前端用了一个叫做head.js的js加载器, 官方网站在 http://headjs.com/ 号称是你只需要在你的html文件中的<head>& ...
- python 模块导入
1. 模块导入: 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: import math 你可以认为math就是一个指向已导 ...
- Displaying 1-16 of 86 results for: deep learning
Displaying 1-16 of 86 results for: deep learning Deep Learning By Adam Gibson, Josh Patterson Publis ...
- 【Java】Java里String 的equals和==
Java里面有对象和对象的引用的概念,在String方面,==比较的是引用,equals比较的是对象的具体值. String s1 = new String("abc");Stri ...
- 解读Hashtable
http://perhaps.cnblogs.com/archive/2006/01/06/312335.html 昨天看到了叶漂兄的Post:<Hashtable的烦恼!>,文中提出有关 ...
- 报错java.net.SocketException: Software caused connection abort: recv failed 怎么办
产生这个异常的原因有多种方面,单就如 Software caused 所示, 是由于程序编写的问题,而不是网络的问题引起的. 已知会导致这种异常的一个场景如下: 客户端和服务端建立tcp的短连接,每次 ...