所以我想创建一个struts收音机,它将显示元素(通过列表传递到参数" list"和" listKey"。 我想补充的是,有些无线电将是只读的(基于在服务器端bean上声明的某些字段)。
所以struts radio在jsp中是这样的:
<s:radio id="radioStatutType"
name="radioStatutType"
theme="extend"
templateDir="template"
list="statList"
listKey="myId"
listValue="label"
onclick="checkType();"
disabled="disabRgt" />
所以字段&#34; myId&#34;和&#34;标签&#34;在同一个bean中声明并且它们都完美地工作(所以我认为范围是正确的。)
与这两个字段相同,我声明了一个名为&#34; disabRgt&#34;的字符串。 (在bean中)填充了true / false(使用某些代码计算的布尔值上的toString)。我声明了setter和getter但是在显示jsp(和radio)时没有使用这个字段(我通过调试观察点访问/修改验证了)。
所以我将此字段更改为boolean(primitive),但它不起作用。最后,我将吸气剂更改为&#34; isDisabRgt&#34;而不是&#34; getDisabRgt&#34; =&GT;结果相同..
所以看来这个领域&#34; disabRgt&#34;永远不会被评估,&#34;禁用&#34;无线电中的参数始终填充默认值(为假)。
希望我解释得很好!有什么想法吗?
答案 0 :(得分:2)
由于disabled="%{myBoolean}"
没有评估表达式,因此您必须以其他方式执行此操作:
在变量上使用<s:if>
显示启用或禁用的无线电:
<s:if test="%{disabRgt}">
<s:radio ... disabled="true" >
</s:if>
<s:else>
<s:radio ... >
</s:else>
使用Javascript禁用它:
<script>
$(function() {
if (<s:property value="%{disabRgt}"/>){
$("#radioStatutType").prop( "disabled", true );
}
});
</script>
请记住永远使用布尔值,不要像布尔的toString()
s那样使用voodoos;)