struts 2标签之s:if 、s:iterator注意的问题

本文深入剖析了在实际开发中经常遇到的Struts2和JSTL标签使用误区,详细解释了如何避免在代码中出现的常见问题,如在s:if标签内误用$符号、单个字符字符串比较问题,以及何时使用#、何时省略#等。通过案例分析,旨在帮助开发者提升代码质量和减少错误。
摘要由CSDN通过智能技术生成

       由于粗心,也没有相应总结,竟然将JSTL标签与Struts2标签混淆,从而导致了一些细节上面的问题,今天我给自个总结下,以

后不要再犯这样的错误。

总喜欢在s:if标签里面使用$,导致各种数据读不出来;

strust 2 if 标签的单个字符字符串比较的问题;

还有就是啥时候用#,啥时候不用#,啥时候可以省略#。

代码1、

	<select id="typeProvider" name="typeProvider" style="width: 200px;">
		<s:iterator value="providers" var="provider">
			<option value="${provider.id}"  
				<s:if test="id==equipment.provider.id">selected="selected"</s:if> >${provider.name}
			</option>
		</s:iterator>
	</select>

代码作用:跳转到修改资料页面时,下拉列表默认选中的为本设备所对应的供应商

equipment(本设备对象)、providers(所有供应商List)均有后台Action提供geter/setter方法。

这行代码(正确):

<s:if test="id==equipment.provider.id">selected="selected"</s:if> >${provider.name}
这个位置,总是写成( 错误):

<s:if test="provider.id == equipment.provider.id">selected="selected"</s:if> >${provider.name}
后面发现可以这样写 也正确

<s:if test=">#provider.id==equipment.provider.id">selected="selected"</s:if> >${provider.name}

其实原理还真是不怎么清楚,只知道如果action中如果声明了变量,并赋之以set,get方法,那么接收参数是不需要使用#,假如就是普通的request传递,则需要用#。哪位大神如果知晓,希望能够指点一二。


代码2、

<span style="white-space:pre">	</span><s:iterator value="equipmentList" var="equipment" status="status">
		<tr style="height: 25px; text-align: center;">
			<td><s:property value="#status.index+1"/></td>
			<td>${equipment.terorder}</td>
			<td>${equipment.tertype}</td>
			<td>${equipment.provider.name}</td>
			<td>
				<s:if test="#equipment.isuser==1">
				启用
				</s:if>
				<s:if test="isuser == 0">
				禁用
				</s:if>
			</td>
			<td>${equipment.opercard}</td>
			<td>${equipment.bizcard}</td>
		</tr>
	</s:iterator>

还是得说说这个,不过却还要其他问题,代码如下(正确):(注意此时的tm_onlinestatus为String类型)

	<s:if test="%{#items.tm_onlinestatus == 1}">    
	<span style="color:blue">在线</span>
	</s:if>
	<s:if test="%{#items.tm_onlinestatus == 0}">    
	<span style="color:red">下线</span>
	</s:if>

不过这样写就不对啦(错误)!

<span style="white-space:pre">	</span><s:if test="%{#items.tm_onlinestatus == '1'}">    
	<span style="color:blue">在线</span>
	</s:if>
	<s:if test="%{#items.tm_onlinestatus == '0'}">    
	<span style="color:red">下线</span>
	</s:if>

还要一种写法,估计更容易理解(正确):

	<s:if test='%{#items.tm_onlinestatus ==  "1"}'>    
	<span style="color:blue">在线</span>
	</s:if>
	<s:if test='%{#items.tm_onlinestatus == "0"}'>    
	<span style="color:red">下线</span>
	</s:if>

这里的话:因为java是强类型语言,单引号表示char类型,只能赋给一个字符给char类型,而双引号则表示String类型,因为tm_onlinestatus属性是String类型,那么必须要用双引号。然后对于为何可以不用直接 == 1 这个的话也不是很明白,同样希望指点一二。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值