Struts2.0深入学习 命名空间,模型驱动,表单重复提交
时间:2009-11-12 javaeye xiaobojava
Struts2深入探索:
1,package中的abstract="true"表示该package里面不能包函action元素
2,package中若指定namespace="/mynamespace"则:
<!--
包的namespace要以"/"开头,对应的页面的路径前面也加上/mymengya/ActionName.action
如:<s:form action="/mymengya/register.action" method="post" theme="simple">
-->
<package name="mengya" extends="struts-default" namespace="/mymengya">
<action name="register"
class="com.mengya.action.RegisterAction">
<result name="success">/show.jsp</result>
<result name="input">/index.jsp</result>
<result name="invalid.token">/index.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
在页面form的action中也要加上/mynamespase并且还要加上后缀action(不管是不是用的struts标签)
3,模型驱动
/**
* 模型Bean
* @author 张明学
*
*/
public class RegisterBean {
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Action则要接实com.opensymphony.xwork2.ModelDriven接口:
public class RegisterAction extends ActionSupport implements ModelDriven {
/**
* 模型驱动,该模型Bean必须实例化
*/
private RegisterBean loginBean = new RegisterBean();
public Object getModel() {
return loginBean;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
Struts2.0深入学习 命名空间,模型驱动,表单重复提交(2)
时间:2009-11-12 javaeye xiaobojava
对应页面则可以直接用模型Bean的属性
如:
<tr>
<td>
用户名:
<s:textfield name="username"></s:textfield>
<%-- 将form的theme="simple"就可以自由布局了,对于fielderror加上name属性就可以显示这个属生的错误信息 --%>
<s:fielderror name="username"></s:fielderror>
</td>
</tr>
<tr>
<td>
密码:
<s:password name="password"></s:password>
<s:fielderror name="password"></s:fielderror>
</td>
</tr>
<s:property value="username"/>
<s:property value="password"/>
5,表单重复提交:
一,在form里面加上<s:token id="register"></s:token>标签
二,在Action里加上<interceptor-ref name="token"></interceptor-ref>拦截器
默认拦截器:<interceptor-ref name="defaultStack"></interceptor-ref>
三:原理:
当页面第一次生成的时候<s:token id="register"></s:token>会生成一个隐藏表单域其中包涵一个 |