我在jstl中编写了一段代码。执行html时出现以下错误。
我可以在c:set中调用value属性中的方法。如果没有,请告诉我如何执行此操作。
例外:
com.sun.facelets.tag.TagAttributeException: /role/MyPage.xhtml @33,82 value="#{roleManager.roleStatus(roleId)}" Error Parsing: #{roleManager.roleStatus(roleId)}
代码:
<select name="123">
<c:forEach items="#{roleManager.addRoleList}" var="category">
<c:set var="roleId" value="#{category.value}" />
<c:set var="roleIdValue" value="#{roleManager.getRoleStatus(roleId)}" />
<c:if test="${roleIdValue}">
<option value="#{roleId}" style="color:#990000;"> <h:outputLabel value="#{category.key}" /></option>
</c:if>
<option value="123"> <h:outputLabel value="#{category.key}"/></option>
</c:forEach>
</select>
答案 0 :(得分:1)
标准el解析器无法使用参数评估方法调用。 以下是一些解决方案:
在bean中使用temp属性:
<c:set target="${roleManager}" property="roleId" value="${roleId}"/>
<c:set var="roleIdValue" value="#{roleManager.roleStatus}" />
此外,您还需要将以下代码添加到您的bean中:
private String roleId;
public String getRoleStatus() {
// Invocation of your logic with the parameter.
return getRoleStatus(getRoleId());
}
public String getRoleId() {
return roleId;
}
public void setRoleId(String roleId) {
this.roleId = roleId;
}
使用功能:
在页面上:
${prefix:methodName(param1, param2, ...)}
你应该在taglib中声明这个函数:
<function>
<name>methodName</name>
<function-class>className</function-class>
<function-signature>
returnType methodName(param1Type, param2Type, ...)
</function-signature>
作为参数,您可以使用您的roleManager本身和参数。
使用允许方法调用的el-resolver:
使用例如JBoss el解析器, 或者您也可以按照此处的说明实施自己的解决方案: http://technology.amis.nl/blog/622/how-to-call-methods-from-el-expressions-pre-jsp-20-trick-for-jsps-with-jstl