在显示默认值时textfield、password、combox不需要写value属性,在struts框架下,只要action层的属性名字与其标签中的name属性值一样,struts将自动获取到值
demo
<s:form name="form1" method="post" namespace="/users" action="update" theme="simple">
姓名:<s:textfield name="username" ></s:textfield><br>
密码:<s:password name="password" ></s:password><br>
确认密码:<s:password name="repassword"></s:password><br>
性别:<s:select list="#{'1':'男','2':'女' }" value="sex"></s:select><br>
年龄:<s:textfield name="age"></s:textfield><br>
<sx:datetimepicker name="birthDay" value="#birthDay" displayFormat="yyyy-MM-dd" label="生日" ></sx:datetimepicker><br>
爱好:<s:checkboxlist list="hobbies" name="hobby" value="hobby" listKey="id" listValue="idvalue"></s:checkboxlist><br>
是否对学习感兴趣:<s:radio label="是否对学习感兴趣" name="radioselect" list="radios" listKey="name" listValue="value" value="radioselect"></s:radio><br>
民族:<s:combobox list="nations" name="nation" listKey="id" listValue="idvalue"></s:combobox><br>
地址:<s:doubleselect doubleList="shengshiList[top]" list="shengshiList.keySet()" listKey="pid" listValue="pvalue" doubleListKey="cid" doubleListValue="cvalue" doubleName="shiSimple" name="shengSimple" value="shengSimple" doubleValue="shiSimple"></s:doubleselect>
<br>
城市:<s:select list="#{'1':'美国','2':'俄国'}" name="chengshi5" value="chengshi5">
<s:optgroup list="#{'3':'美国城市1','4':'俄国城市1'}" label="扩展城市"
listKey="key" listValue="value" ></s:optgroup>
</s:select><br><br>
是否公开个人信息:<s:checkbox name="isShow" value="isShow"></s:checkbox><br>
<s:submit value="提交修改" theme="simple"></s:submit>
</s:form>
需要注意的是password不会回显数据,应该是处于安全性的考虑,博主修行尚浅,暂时没有研究其源码。
select、datapicker、chekboxlist、radio、doubleselect、checkbox都需要写value属性,前提是要回显数据,如果不回显,自然不需要。
checkbox的value为布尔类型
doubleselect动态的list为map类型Map<Entity A,List<Entity B>> maplist;doubleList=maplist[top],list=maplist.keySet()(key的集合); 对应的listKey=aid;listValue=avalue(这里假设A的两个属性为 aid,avalue;B的属性有bid,bvalue);doubleListKey="bid",doubleListKey="bvalue";分别制定doubleName和name及value和doubleValue。
combox的list属性是List类型,List<T>,对应listKey为T的属性1,listValue为T的属性2。
select的list也是List类型,optgroup的list同理。radioselect同理,checkbox同理,datepicker是struts自带的,需要导入struts-dojo-tags架包,在使用时要注意在</head>前要加上
<s:head theme="xhtml"/>
<sx:head parseContent="true"/>如果没有写,那么这个date框就没有,显示不出来;
并且jsp文件头前要写入标签<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>。
在checkbox使用时特别注意:
有时候会这样,在前台写的chekbox单选框的时候,后台获取的值始终未true或者false,问题在于struts需要的是这种getset方法,
public void setShow(boolean isShow) {
this.isShow = isShow;
}
public boolean getIsShow() {
return isShow;
}
而myeclipse生成的是下面这样的,没记错的话应该是,这个问题困扰了博主半天,网上找各种方法,最后还是找到了,大家在使用时要注意。
public void isShow(boolean isShow) {
this.isShow = isShow;
}
public boolean getIsShow() {
return isShow;
}
还有许多标签,在上述中,需要在s:form标签对中使用,否则会报缺失属性的错误,500错误,表达式参数名属性未定义,Expression parameters.forName is undefined...Class:freemaker.core.TemplateObject。这里博主就不一一举例了,大家试试就知道了。