struts2中表现层的数据展现(bean,list,iterator,format,etc)

假定在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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值