??xml version="1.0" encoding="utf-8" standalone="yes"?><!-- Action -->
<action
attribute="loginForm"
name="loginForm"
path="/login"
scope="request"
type="org.svse.struts.action.LoginAction">
<forward name="ok" path="/ok.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
<!-- DispatchAction -->
<action
attribute="calForm"
name="calForm"
parameter="method"
path="/cal"
scope="request"
type="org.svse.struts.action.CalAction">
<forward name="result" path="/cal_result.jsp"></forward>
</action>
<script type="text/javascript">
function dosubmit(url){
var myform = document.myform;
myform.action = url;
myform.submit();
}
</script>
</head>
<body>
<!-- 一个表单多个按?nbsp;-->
<form method="post" name="myform">
W一个数:<input type="text" name="num1"><br>
W二个数:<input type="text" name="num2"><br>
<input type="button" value="?/span>" onclick="dosubmit('cal.do?method=add')">
<input type="button" value="?/span>" onclick="dosubmit('cal.do?method=sub')">
<input type="button" value="?/span>" onclick="dosubmit('cal.do?method=mul')">
<input type="button" value="?/span>" onclick="dosubmit('cal.do?method=div')">
</form>
</body>
//通过资源文g的key(button.add),来找C务方法add(),sub()
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("button.add","add");
map.put("button.sub","sub");
return map;
}
# Resources for parameter 'org.svse.struts.ApplicationResources'
# Project ch03
button.add=add
button.sub=sub
<!-- 一个表单多个提?nbsp;-->
<form action="cal2.do" method="post">
num1:<input type="text" name="num1"/><br>
num2:<input type="text" name="num2"/><br>
<html:submit property="method">
<bean:message key="button.add"/>
</html:submit>
<html:submit property="method">
<bean:message key="button.sub"/>
</html:submit>
<form>
<!-- MappingDispatchAction -->
<!-- add -->
<action
attribute="calForm"
name="calForm"
parameter="add"
path="/add"
scope="request"
type="org.svse.struts.action.Cal3Action">
<forward name="result" path="/cal_result.jsp" />
</action>
<!-- sub -->
<action
attribute="calForm"
name="calForm"
parameter="sub"
path="/sub"
scope="request"
type="org.svse.struts.action.Cal3Action">
<forward name="result" path="/cal_result.jsp" />
</action>
<form action="add.do" method="post">
num1:<input type="text" name="num1"><br>
num2:<input type="text" name="num2"><br>
<input type="submit" value="?/span>">
</form>
]]>
1.HTML TagQ?/p>
用来创徏能够和Struts框架以及其它相应的HTML标签交互的HTML输入表单;
如:<htmlQform></htmlQform>Q?lt;htmlQtext/>Q?lt;htmlQpassword/>Q?lt;htmlQradio/>Q?lt;htmlQcheckbox/>Q?lt;htmlmultibox>
2.Bean Tag
该标{ֺ包含的标{֏以用来创建bean、访问bean和访问bean的属性?/p>
如:<beanQwrite/>Q用于将bean的属性输送到jsp面Q?lt;beanQdefine/>定义一个新的bean
3.Logic Tag
该标{ֺ包含的标{֏以用来进行逻辑判断、集合P代和程控制?/p>
如:<logicQiterate/>Q用来@环P?<logicQeaual/>Q用来进行逻辑判断
4.NestedQ增强对其他Struts标签的嵌套用能?/p>
该标{ֺ建立在前三个标签库的基础上,h前三个标{ֺ的所有功能,只是允许标签间的嵌套?/p>
5.Template Tag
随着Titles框架包的出现,此标记已开始减?/p>
下面介绍几个最常用的标{:
<htmlQcheck box/>一般用于一个选项的复选框
<htmlQmultibox/>一般用于多个选项的复选框
<beanQwrite name="user" property="username"/>{同于EL表达C:${user.username}
<beanQdefine id="inter" name="user" property="interest" type="java.lang.String"/>定义一个bean
<beanQmessage key=" " arg0=" "/> key 定义在资源文件中Qargs0[1,2]为参?/p>
<logicQiterate name="list" id="user"> {同于JSTL的:<cQfoeach item=${list} var="user"/>
<logicQequal name="user" property="sex" value="0"/>{同于JSTL的:<cQwhen test=""/>
<logicQempty />标签是用来判断是否ؓI的。如果ؓI,该标{体中嵌入的内容׃被处?/p>
<logic:empty name="listForm" property = "persons">
<div>集合persons为空!</div>
</logic:empty>
1.下面l一个表单的完整代码Q?/p>
使用html标签作ؓ表单输入Q可以方便的使用验证框架卻I<html:errors property="username">
2.下面l一个显C数据的代码Q?/p>
作ؓ昄数据QStruts标签q不比Jstl与EL方便Q因此,本h更习(fn)惯用后?/span>
其实Struts标签的好处,q不是上面这些,而是它可利用ActionForm来填充数?/span>
比如我们在做面数据修改的时候,会让当前面数据昄到显CZ攚w面,q样利于客户端修?/span>
以前我们q样做的Q根据id从数据库查出Q然后用html的value属性填充,现在有了Struts标签Q就不需要那么麻烦了
直接在Action里填充ActionForm的数据就搞定?/span>Q?/p>
1.ActionForm 2.ValidatorForm 3.ValidatorActionForm 4.DynaActionForm 5.DynaValidatorForm 6.DynaValidatorActionForm 7.LazyValidatorForm 由命名来看,M使用规律如下Q?/p>
1.带有Validator的,但都可用验证框? 2.以Dyna开头的Q都是自动生成相应的formQ只需在Struts-config.xml中配|属性即?/span> 3.中间是否有Action的,表示validation.xml中的form的name名,是跟formbean的名Uͼq是/path路径 下面按规律逐个介绍Q?/p>
1.ActionForm,DynaActionForm此类不支持验证框Ӟ需手动创徏formQƈ实现自定义的validate()Ҏ(gu) 但DynaActionForm是特?它自动生成form)Q所以没有validate()Ҏ(gu)Q所以也׃能验?br />
2.ValidatorFormQValidatorActionFormQDynaValidatorForm DynaValidatorActionFormQLazyValidatorForm 此大c都是支持验证框架的,当然也可以完成自定义的validate()Ҏ(gu),来覆盖验证框架的Ҏ(gu)Q其中: ValidatorFormQDynaValidatorFormQLazyValidatorForm 没有ActionQ是针对form来验证的Q即凡是用到该form的页面,都必验证; 反之QValidatorActionFormQDynaValidatorActionFormQ则是针对Action的,要验证哪个ActionQ就跟那?path路径Qvalidation.xml代码如下Q?/p>
针对七种ActionFormQ我们要灉|q用Q需要验证谁Q就让它停下Q不需要的Q让它通过?/p>
另外介绍下验证框架的使用步骤Q?/p>
1.在validator-rules.xml中引入验证插件的代码Q?/p>
public ActionForward upd(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;
int userid = Integer.parseInt(request.getParameter("userid"));
UserInfo user = biz.findUser(userid);
String[]interest = StringUtil.stringChange2(user.getInterest());
//用户信息填充到ActionForm
userForm.setUser(user);
userForm.setInterest(interest);
return mapping.findForward("upd");
}
<html:form action="/doupd">
用户名:<html:text property="user.username"></html:text><p/>
密码Q?/span><html:text property="user.pwd"></html:text><p/>
性别Q?/span><html:radio property="user.sex" value="?/span>">?/span></html:radio>
<html:radio property="user.sex" value="?/span>">?/span></html:radio><p/>
城市Q?/span><html:select property="user.city">
<html:option value="">请选择</html:option>
<html:option value="武汉">武汉</html:option>
<html:option value="上v">上v</html:option>
<html:option value="北京">北京</html:option>
</html:select><p/>
爱好Q?/span><html:multibox property="interest" value="看书"/>看书
<html:multibox property="interest" value="游戏"/>游戏
<html:multibox property="interest" value="睡觉"/>睡觉<p/>
<html:submit value="修改"/>
</html:form>
]]><form-validation>
<formset>
<!-- 此时针对Action验证,name?/span>/path路径--!>
<!--如果是针对form验证Qname则跟formbean的名U?/span>--!>
<form name="/login">
<field property="username" depends="required">
<msg name="required" key="username"/>
</field>
<field property="pwd" depends="required,minlength">
<msg name="required" key="pwd"/>
<msg name="minlength" key="pwd1"/>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
<!--引入验证框架--!>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<form name="loginForm">
<field property="username" depends="required">
<msg name="required" key="username"/>
</field>
<field property="pwd" depends="required,minlength">
<msg name="required" key="pwd"/>
<msg name="minlength" key="pwd1"/>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
# Resources for parameter 'ApplicationResources'
# Project ch07
username=username is null
pwd=pwd is null
pwd1=pwd is less than 6
]]>