struts2返回结果集input值的作用于用法
在struts.xml配置文件当中action下的result标签name值为input时,即:<result name="input"></result>能起到校验数据并自动跳转到指定的链接下。
比如咋输入的数据要求是整形实际输入却是字符串;要求不能提交为空的字符,提交的实际数据却是空的等等。当检验数据不符合要求时候,可以使用<result name="input"></result>跳转到指定的页面链接或者action等。
诶呀,讲的不清楚,用实际的小demo来看看也许能更易懂一点。
定义一个数据封装的对象Java bean类:User
public class User implements Serializable{ private String name; private String psw; private int age; //下面还要实现三属性的get/set方法 }
struts.xml文件配置如下:
<action name="sectAction" class="com.usc.geowind.lilin.actions.SecAction" method="execute"> <result name="success"> /success.jsp </result> <!-- 数据校验错误时候执行该返回集 --> <result name="input"> /inputError.jsp </result> </action>
此时我们在action类中,只实现数据封装,不做任何的数据校验判定。
public class SecAction extends ActionSupport { private User user; @Override public String execute() throws Exception { System.out.println(user); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
当从前台提交的表单中的age值是字符串时候,action就会自动的跳转到inputError.jsp页面下,当数据提交是符合要求的时候就会跳转到success.jsp页面下
怎么使用<result name="input"></result>进行数据校验呢?
以上面的为例,校验用户名是否为空,数据为空是不符合要求则继续跳转到Login.jsp页面
Login.jsp部分代码
<s:form namespace="" action="sectAction" method="post"> <s:textfield label="useName" name="user.name"/> <s:fielderror name="userNameError"></s:fielderror> <s:textfield label="age" name="user.age"/> <s:password label="psw" name="user.psw"/> <s:submit label="submit"></s:submit> <s:reset label="reset"></s:reset> </s:form>
action类的代码:
public String execute() throws Exception { if (user.getName() == null || "".equals(user.getName())) { //向jsp的struts标签提示信息 this.addFieldError("userNameError", "用户名输入有误!"); //必须写return语句,不然校验没起到任何作用 return INPUT; } System.out.println(user); return SUCCESS; }
校验的代码写在execute方法中,必须返回input字符串,否则不起什么作用。除了这种写法外,也可以把校验的代码写在validate方法中,这样不需返回值也可以达到相同的作用
@Override public void validate() { if (user.getName() == null || "".equals(user.getName())) { // 向jsp的struts标签提示信息 this.addFieldError("userNameError", "用户名输入有误!"); } }