我的JSP中有以下代码:
<c:set var="myBoolean" value="item.lock${myappli.code.value()}"/>
<c:out value="${myBoolean}"/>
<c:out value="${requestScope[myBoolean]}"/>
在项目中我有几个布尔值lockCode1,lockCode2,....所以我使用第一行代码来获取字符串“item.lockCode1”,“item.lockCode2”。 这个表达式(item.lock $ {myappli.code.value()})工作正常。我用它来创建我的复选框:
<form:checkbox path="item.lock${myappli.code.value()}" value="item.lock${myappli.code.value()}" />
现在我想要的是评估“item.lockCode1”,“item.lockCode2”,....的值,以便我得到布尔值lockCodeX的值。
我写的时候
<c:out value="${myBoolean}"/>
显示: item.lockCodeX
我在stackoverflow上找到了第三行:
<c:out value="${requestScope[myBoolean]}"/>
我希望它会评估“item.lockCodeX”并给我'true'或'false',这就是它的价值。但它不起作用。我如何才能将我的表达式“item.lockCodeX”评估为true / false?
谢谢, 即
PS: 我的最终目标是我想(des)根据布尔item.lockCodeX的值激活复选框。 所以我想到了类似的东西:
<c:choose>
<c:when test="here evaluate my expression to true/false">
<form:checkbox path="item.lock${myappli.code.value()}"
value="item.lock${myappli.code.value()}" disabled="false"/>
</c:when>
<c:otherwise>
<form:checkbox path="item.lock${myappli.code.value()}"
value="item.lock${myappli.code.value()}" disabled="true"/>
</c:otherwise>
</c:choose>
PS2:我不能使用地图,代码就是这样,我无法改变它。
PS3: 我试着写:
<c:when test="item.lock${myappli.code.value()}">
和
<c:when test="${item.lock${myappli.code.value()}}">
但它不起作用。
PS4: 以下是对象项的相关行:
public class Lot extends BaseEntite {
...
private Boolean lockBEL;
private Boolean lockPAR
private Boolean lockCIA;
private Boolean lockAFA;
private Boolean lockLO;
...
在我的Controller中,我从webservice获取对象,并将其放入我的ModelAttribute searchForm中:
searchMetier.getResultsSearch(context, this.formToDemand(searchForm));
答案 0 :(得分:0)
我从您的代码中看到的是该行
<c:set var="myBoolean" value="item.lock${myappli.code.value()}"/>
为您提供String
值,因此您无法真正访问Boolean
字段。为此,您需要检索值项目Object
本身,以便将Boolean
值设为item.lockBEL.value()
。
我会尝试如下:
<c:set var="myItem" value="${item}">
<c:set var="myBoolean" value="${myItem.lockBEL.value()}"
如果你想要锁定+(BEL或PAR或......),你应该使用EL提供的一些技术,如连接,一些信息here。问题是我对EL不是很熟悉,但是我看到没有人回复我决定尝试一下。
PS:我发现您将字段设置为私有字段,因此您应该提供一些公共getter来访问它们,可能会这样:{$myItem.getLockBEL().value()}