如何获取jstl中的值

时间:2011-07-26 12:53:51

标签: java jsf jstl

我在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> 

1 个答案:

答案 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