0 0

struts2的 if 标签用法的疑问10

struts2 的if标签是经常用到的 ,但是我却经常不能用好 ,非常苦恼,我的错误如下:

我写了一个下拉框,需要用if来判断 option 中的 value ,决定是否需要选中此项

<select name="remarks">
    <option value="">---请选择---</option>
    <option value="购入" <s:if test="%{remarks} == '购入'">selected</s:if> >购入</option>
    <option value="自备" <s:if test="%{remarks} == '自备' ">selected</s:if> >自备</option>
</select>
我的期望是 :当%{remarks}取得的值为购入时 ,选中购入选项,否则选中自备选项。

可是如何都没有完成这个期望。
于是我做了一些测试:
在<select ../> 之前插入
<s:property value="%{remarks}"/>  页面显示结果: 购入
${remarks}  页面显示结果: 购入

于是我这样写:
<option value="购入" <s:if test="${remarks} == '购入' ">selected</s:if> >购入</option>  :出错!!!
<option value="自备"
<s:if test=" <s:property value="%{remarks}"/> == '自备' ">selected</s:if> >自备</option> :出错!!!

第1个下划线处 %{}应该是没有取到值
第2 和 第3下划线处都出错了,不知这三处原因分别是什么呢?

有知道的并且路过了,请您支招一二 ,
小弟万分感激。。

问题补充:
kfc_davy 写道
<s:select name="remarks" value="%{remarks}">
....
</s:select>


用struts2的标签就可以了,何必这样呢?


我需要的是  根据取到的%{remarks}判断需要选中哪一个option,
我现在就去试一下你的建议  。

问题补充:
kfc_davy 写道
<s:select name="remarks" value="%{remarks}">
....
</s:select>


用struts2的标签就可以了,何必这样呢?


呃 还是没有办法试出来咯。。

问题补充:
蔡华江 写道
'购入'这里能用单引号吗?

去掉单引号我有试用也是不行 
这里的单引号应该是为了和外面的 双引号区别开来吧,应该也是表示字符串的意思吧。

问题补充:
kfc_davy 写道
remarks 是怎么设值进来的?

是一个pojo的一个属性,这个pojo在action中被定义set()/get(),查询完数据库后把这一pojo类型的数据放进一list,传回页面的。

问题补充:关于根据取得 remarks 来判断 需要选中哪一个 option 已经有了一种可行的方案
            <option value='购入' ${model.materialRemarks=="购入"?'selected':''} >购入</option>
            <option value="自备" ${model.materialRemarks=="自备"?'selected':''} >自备</option>

已试验成功。

关于,后面两个下划线错误的原因,希望有人能够 ,描述一二哦。

问题补充:
蔡华江 写道
引用
<option value="购入" <s:if test="%{remarks} == '购入'">selected</s:if>  >购入</option>

因为字符串必须用双引号定义
<option value="购入" <s:if test="%{remarks} == \"购入\"">selected</s:if>  >购入</option> 

即可

引用
<option value="购入" <s:if test="${remarks} == '购入' ">selected</s:if> >购入</option>

同上
注:${remarks}不知道要不要用双引号标注,这要看struts对el表达式的支持程度。具体怎么样,个人感觉要改为
<option value="购入" <s:if test="\"${remarks}\" == \"购入\" ">selected</s:if> >购入</option>


引用
<s:if test=" <s:property value="%{remarks}"/> == '自备' ">selected</s:if> >自备</option>

同上
<s:if test=" <s:property value="%{remarks}"/> == "自备" ">selected</s:if> >自备</option>


1.谢谢你花这么多的时间  认真看我的问题 还有回答我的问题

2.我找到了我的代码的错误
  改正后代码: <s:if test="%{remarks=='购入'}">购入</s:if>  
  原先代码为: <s:if test="%{remarks}=='购入'>购入</s:if>

3. <s:....  和 ${} 是二种不同的东东, 它们可以用在同一个页面,但是不能 把 ${} 用在<s:..里面 。

4.实验了您的建议的方法,仍然是没有得到效果。

5.从您的建议中,我也有所收益。顺便提一下struts2的jsp页面中%{remarks=='购入'} 单引号中的 '购入' 确实是可以的。

6.感谢你的支持和帮助 , 所以给分。
2010年8月05日 17:42

7个答案 按时间排序 按投票排序

0 0

采纳的答案

引用
<option value="购入" <s:if test="%{remarks} == '购入'">selected</s:if>  >购入</option>

因为字符串必须用双引号定义
<option value="购入" <s:if test="%{remarks} == \"购入\"">selected</s:if>  >购入</option> 

即可

引用
<option value="购入" <s:if test="${remarks} == '购入' ">selected</s:if> >购入</option>

同上
注:${remarks}不知道要不要用双引号标注,这要看struts对el表达式的支持程度。具体怎么样,个人感觉要改为
<option value="购入" <s:if test="\"${remarks}\" == \"购入\" ">selected</s:if> >购入</option>


引用
<s:if test=" <s:property value="%{remarks}"/> == '自备' ">selected</s:if> >自备</option>

同上
<s:if test=" <s:property value="%{remarks}"/> == "自备" ">selected</s:if> >自备</option>

2010年8月06日 13:12
0 0

你试equals了吗?类似这种<s:if test="'219.211.211.82'.equals(ipaddress)||'59.

2010年8月06日 12:58
0 0

remarks 是怎么设值进来的?

2010年8月06日 08:29
0 0

你可以试试equals,<s:if test=' "购入".equals(${remarks})'> ,标签里支持写equals的,前提是字符串,当然你的是字符串。

2010年8月05日 21:48
0 0

\"  \"

2010年8月05日 19:15
0 0

'购入'这里能用单引号吗?

2010年8月05日 17:52
0 0

<s:select name="remarks" value="%{remarks}">
....
</s:select>


用struts2的标签就可以了,何必这样呢?

2010年8月05日 17:47

相关推荐

Global site tag (gtag.js) - Google Analytics