index.jsp:相当于用户登录页面,这里进行简写
<body>
简单数据校验<a href="user/user_add!add?name='HAHA'">添加用户</a>
</body>
struct.xml
<struts>
<package name="user" namespace="/user" extends="struts-default">
<action name="user_add" class="com.front.action.UserAction">
<result>
/user_add_success.jsp
</result>
<result name="error">
/user_add_error.jsp
</result>
</action>
</package>
</struts>
UserAction
public class UserAction extends ActionSupport {
//这种接收参数的方式:将传过来的数据(可以是URL数据,或者其他数据),在struct创建对象时,就能付好值,并且已经是转换好的
//但是要注意设置的私有变量不能随意改名,因为传过来的数据是名称固定的。否则不能正常接收
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String add(){
if(name==null||!name.equals("admin")){
this.addFieldError("name", "name is error");//Add an Action-level error message to this Action.
//this.addFieldError("name", "name is too long");用来验证map的值是个数组用的。
return "error";
}
return SUCCESS;
}
}
user_add_error.jsp
<font color="red">在WEBRoot下的'property标签中图片对此进行了解释' </font><br/>
User Add Error!
<s:fielderror fieldName="name"></s:fielderror><!-- 在后端要取的名称 ,并不常用因为若不对其加样式,struct会自动添加一个默认的
样式,这是不需要的。所以不常用-->
<br/>
<s:property value="errors"/><!--s:property: 用来取Debug中的Value Stack Contents、Stack Context的内容-->
<!-- 显示{name=[name is error]},用来取属性名对应的属性值,这也是Map类型key=name value=name is error -->
<br/>
<s:property value="errors.name"/><!-- 用来去map中某个键的值 结果为:[name is error] ,它是一个数组 -->
<br/>
<s:property value="errors.name[0]"/><!-- 取键为name的值(字符串数组)中的第一个值 结果为:name is error
取出的就是一个值,纯数据,可以对其任意加css、html
-->
<s:debug></s:debug>
</body>