struts2中关于添加验证,我们一般添加完就转到另一个action,以免数据重复添加,struts2中常用的验证方法有两种redirectAction和token。对于这两种方法之间肯定是有区别的,下面我们来看看关于redirectAction和token 这两种方法在struts2的区别。
当使用type=“redirectAction” 提交到一个action并且需要传递一个参数时。
login.jsp
<form action="login2">
id:<input type="text" name="id"/><br/>
username:<input type="text" name="username"/><br/>
password:<input type="password" name="password"/><br/>
<input type="submit" value="submit">
</form>
login.action
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username=username
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
loginDto dto = new loginDto();
public String execute()
{
if(dto.getPassword().equals("") && dto.getUsername().equals(""))
{
return "input";
}
int id=dto.getId();
String username=dto.getUsername();
String password=dto.getPassword();
loginDao login=new loginDaoImpl();
System.out.println(id);
System.out.println(username);
System.out.println(password);
login.insertLogin(id, username, password);
return SUCCESS;
}
struts.xml
<action name="login2" class="com.struts2.login.login2">
<result name="success" type="redirectAction">
<param name="ActionName">login.action</param>//要转到action的名字
<param name="id">${id}</param>//带参数传递给下一个action
<param name="username">${username}</param>//带参数传递给下一个action
<param name="password">${password}</param>//带参数传递给下一个action
</result>
</action>
result.jsp
id:${requestScope.id }<br>
username:${requestScope.username }<br>
passwrod:${requestScope.password }<br>
方法都写完运行服务器,添加一条记录后在result.jsp页面就显示出刚刚添加的数据。而当你页面刷新时仍然是显示这条记录(等于刷新login.action)。
退一步在添加新的记录时,可以显示新添加的记录。而在token中就跟redirectAction有很大的区别,下面看下token的实现方式。
使用token时,代码如下:login.jsp
<s:form action="login1">
username: <s:textfield key="id"/>
username: <s:textfield key="username"/>
password<s:password key="password" />
<s:token></s:token>//这行代码必须添加,实现token隐藏域验证码
<s:submit/>
</s:form>loginToken.action
private int id;
private String username;
public int getId() {
return id;
}public void setId(int id) {
this.id = id;
}public String getUsername() {
return username;
}public void setUsername(String username) {
this.username = username;
}public String getPassword() {
return password;
}public void setPassword(String password) {
this.password = password;
}private String password;
loginDto dto = new loginDto();
public loginDto getModel() {
// TODO Auto-generated method stub
return dto;
}
public String execute() throws Exception {
// TODO Auto-generated method stub
int id=dto.getId();
String username=dto.getUsername();
String password=dto.getPassword();
loginDao login=new loginDaoImpl();
System.out.println(id);
System.out.println(username);
System.out.println(password);
login.insertLogin(id, username, password);
System.out.println(dto.getPassword());
System.out.println(dto.getUsername());
return SUCCESS;
}
struts.xml
<action name="login1" class="com.struts2.login.loginToken">
<result name="success">/result.jsp</result>
<result name="invalid.token">/token.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
</action>
result.jsp
<s:property value="id"></s:property>
<br>
<s:property value="username"></s:property>
<br>
<s:property value="password"></s:property>
<br>
token.jsp
不能重复添加 <br>
方法都写完运行服务器,添加一条记录后在result.jsp页面就显示出刚刚添加的数据。而当你页面刷新时就会跳转到token.jsp。
退一步在添加新的记录时,也是会跳转到token.jsp。因为token在添加数据时它会自动生成<input type="hidden" name="struts.token.name" value="struts.token" />
<input type="hidden" name="struts.token" value="IABWXQ7L7JFSCDWDMYB78PAKW9F4X47Y" />当你在刷新和重新添加数据时都会与struts.token中的value做比较。如果一样的就跳转到成功页面,不一样就跳转到token.jsp