假定在Action中通过get/set了绑定了一个ModelAndView 的bean,用于渲染页面的数据。在实际的开发中,这个bean可能包含了各种页面需要的信息,因此会相当复杂。
设定:bean mv
public class CompanyMV {
private Company company;
private List<City> cities;
private List<Currency> currencies;
private List<Moneystyle> moneystyles;
private List<Customer> customers;
//.......
private File logofile;
private String logofileContentType;
private String logofileFileName;
//..get/set
}
1,遍历(iterator)
1.1) 包含html
<select name="mv.company.cityid">
<s:if test="mv.cities.size>0">
<s:set name="cities" value="mv.cities" scope="session"/>
</s:if>
<s:iterator value="#session.cities" var="city">
<option value="${city.cityid}"
<s:if test="#city.cityid == mv.company.cityid "> SELECTED </s:if> >
<s:property value="name" /> <s:property value="state"/>
</option>
</s:iterator>
</select>
Note: 此处通过<s:set>设置cities的值到session, 为了防止表单验证之后的list值丢失。如果不通过<s:set>也可使用在form中隐含变量的方式,eg
<s:iterator value="mv.qualitys" status="stat" var="item">
<input type="hidden" name="mv.qualitys[<s:property value="#stat.index" />].id.qualityindex" value="<s:property value="#item.id.qualityindex" />" />
<input type="hidden" name="mv.qualitys[<s:property value="#stat.index" />].qualityvalue" value="<s:property value="#item.qualityvalue" />" />
</s:iterator>
此处的id是qualitys的复合primary key. (通过hibernate生成)
固定的list
<select id="mv.company.payterms" name="mv.company.payterms">
<option value="On Due Date" <s:if test="\"On Due Date\" == mv.company.payterms"> SELECTED </s:if> ><s:text name="comp.locmain.compform.slct.ondate"/></option>
<option value="Due on the 1st" <s:if test="\"Due on the 1st\" == mv.company.payterms"> SELECTED </s:if> ><s:text name="comp.locmain.compform.slct.onfir"/></option>
<option value="Due on the 5th" <s:if test="\"Due on the 5th\" == mv.company.payterms"> SELECTED </s:if> ><s:text name="comp.locmain.compform.slct.onfif"/></option>
<option value="Net 15" <s:if test="\"Net 15\" == mv.company.payterms"> SELECTED </s:if> ><s:text name="comp.locmain.compform.slct.netfit"/></option>
<option value="Net 30" <s:if test="\"Net 30\" == mv.company.payterms"> SELECTED </s:if> ><s:text name="comp.locmain.compform.slct.netthi"/></option>
</select>
1.2) 利用tag
<s:select
name="mv.locid"
list="mv.floors"
listKey="locid"
listValue="shortdescription" />
1.3) 包含for循环的java代码
<select name="curi_servicecutoff">
<%
for (int current = 16; current < 29; current++) {
request.setAttribute("current", current);
%>
<option value="${current}" <s:if test="#request.current == curi_servicecutoff"> SELECTED </s:if> > <s:property value="#request.current" /> </option>
<%
}
%>
</select>
2,格式化(format)
2.1) 数字
<input type="text" size="20" maxlength="5"
name="mv.qualitys[<s:property value="#stat.index" />].qualityvalue"
value="<s:text name="global.format.number.nopositionif"><s:param name="value" value="#item.qualityvalue" /></s:text>"
/>
Note:global.format.number.nopositionif在多语言资源文件中定义,eg
global.format.number.noposition={0,number,##########}
global.format.number.nopositionif={0,number,##########.##}
global.format.number.2position={0,number,##########.00}
global.format.date.normal={0,date,yyyy-MM-dd}
3,集合(List,Array,Set)的显示
直接看代码,仔细阅读,不解析
<s:iterator status="stat" value="mv.suites" var="item">
<tr>
<td>
<input type="text" size="7" maxlength="7" name="mv.suites[<s:property value="#stat.index" />].officeid" value="<s:property value="#item.officeid" />" >
<input type="hidden" name="mv.suites[<s:property value="#stat.index" />].suiteid" value="<s:property value="#item.suiteid" />" />
</td>
<td>
<input type="text" size="8" maxlength="10" style="text-align:right" name="mv.suites[<s:property value="#stat.index" />].size" value="<s:property value="#item.size" />" οnkeyup="javascript:changeEstRent()">
</td>
<td>
<input type="text" size="9" maxlength="10" style="text-align:right" name="mv.suites[<s:property value="#stat.index" />].cost" value="<s:property value="#item.cost" />" readonly>
</td>
<td>
<input type="text" size="15" maxlength="20" name="mv.suites[<s:property value="#stat.index" />].shortdescription" value="<s:property value="#item.shortdescription" />">
</td>
<td>
<input type="text" size="20" maxlength="132" name="mv.suites[<s:property value="#stat.index" />].longdescription" value="<s:property value="#item.longdescription" />">
</td>
<td>
<input type="text" size="2" maxlength="2" name="mv.suites[<s:property value="#stat.index" />].workstation" value="<s:property value="#item.workstation" />">
</td>
<td>
<input type="text" size="4" maxlength="4" name="mv.suites[<s:property value="#stat.index" />].link" value="<s:property value="#item.link" />">
</td>
<td>
<select name="mv.suites[<s:property value="#stat.index" />].rentable" οnchange="javascript:changeEstRent()"
>
<option value="Y" <s:if test="\"Y\" == #item.rentable"> SELECTED </s:if> ><s:text name="setup.month"/></option>
<option value="H" <s:if test="\"H\" == #item.rentable"> SELECTED </s:if> ><s:text name="setup.hour"/></option>
<option value="N" <s:if test="\"N\" == #item.rentable"> SELECTED </s:if> ><s:text name="setup.na"/></option>
<option value="R" <s:if test="\"R\" == #item.rentable"> SELECTED </s:if> ><s:text name="setup.registration"/></option>
</select>
<input type="hidden" name="mv.suites[<s:property value="#stat.index" />].crate" value="<s:property value="#item.crate" />" />
<input type="hidden" name="mv.suites[<s:property value="#stat.index" />].ncrate" value="<s:property value="#item.ncrate" />" />
<input type="hidden" name="mv.suites[<s:property value="#stat.index" />].arate" value="<s:property value="#item.arate" />" />
<input type="hidden" name="mv.suites[<s:property value="#stat.index" />].roomtype" value="<s:property value="#item.roomtype" />" />
</td>
<td>
<select name="mv.suites[<s:property value="#stat.index" />].quality" οnchange="javascript:changeEstRent()">
<option value="0">--</option>
<s:iterator status="stat" value="mv.qualitys" var="qitem">
<option value="<s:property value="#qitem.id.qualityindex" />"
<s:if test="#qitem.id.qualityindex == #item.quality "> SELECTED </s:if> >
<s:property value="id.qualityindex" />(<s:property value="qualityvalue" />)
</option>
</s:iterator>
</select>
</td>
<td>
<input type="text" size="12" style="text-align:right" name="mv.suites[<s:property value="#stat.index" />].targetrent" value="<s:property value="#item.targetrent" />" readonly>
</td>
</tr>