今天老师的第二讲,主要是讲的是一个jsp页面输入的一个校验~
首先,老师将“第一讲”的LoginAction类,继承extends了ActionSupport。
然后通过struts2文件夹中的docs,检索到了ActionSupport的API,发现里面包含了Action最常用的一些方法。
其中就提到了一个校验的方法:
public void validate()------这个校验函数,不应该去进行业务逻辑的校验,也就是不带过多的逻辑,一般作用在本次例子中就是用来判断是否为空的基本作用。
@Override
public void validate() {
if(this.getUsername()==null ||"".equals(this.getUsername().trim()))
{
this.addFieldError("username", "Please enter your username!");
}
if(this.getPassword()==null ||"".equals(this.getPassword().trim()))
{
this.addFieldError("password", "Password required!");
}
相关联的login2.jsp中的代码
<body> <s:form action ="login"> <s:textfield name ="username" label="username"></s:textfield> <s:password name ="password" label="password"></s:password> <s:submit label="Submit"></s:submit> </s:form> </body>
其中this.addFieldError(String arg0, String arg1)中的arg0,要和jsp中的<s:textfield name="xxx" ...> xxx保持一致,这样才能得到关联。arg1的字符串,是代表,显示出错后,屏幕上输出的提示文字。
2. 并且,在修改完LoginAction.java文件后,需要返回struts.xml文件进行相应的配置!
<result name="input">/login2.jsp</result>
注意,此时对应validate的校验函数执行后,会自动的寻找固定的result name="input",所以,这里validate()和input是固定搭配。 这里表示当validate()函数执行完成之后,会自动的返回到login2.jsp页面
3. 显示页面:
B. 如果还需对前台界面的输入进行逻辑验证的话,此时应该将逻辑写在LoginAction.class的execute函数中。
而不是Validate()
在此次例子中,我们加入需求:“界面输入的username和密码只有分别匹配了hello,world才能成功,否则报错”
1. LoginAction.java中的execute方法:
public String execute() throws Exception
{
if("hello".equals(this.getUsername().trim())&&"world".equals (this.getPassword().trim()))
{
return "success";
}
else
{
this.addFieldError("username", "username or password error!!");
return "failer";
}
}
注意:return “failer”
2. 所以现在我们需要返回到Struts.xml进行相应的配置。
struts.xml代码:
<result name="failer">/login2.jsp</result>
代表,当return failer时,前台页面会自动的返回login2.jsp中
3. 结果如图:当输入的username和密码分别为 asd,123 的时候,与我们要求的需求不匹配,此时页面转换成