как получить значение в JSTL - PullRequest
3 голосов
/ 26 июля 2011

Я написал кусок кода в jstl. Я получаю следующую ошибку при выполнении HTML.

Могу ли я вызвать метод в атрибуте value для c: set. Если нет, пожалуйста, сообщите мне, как это сделать.

Исключение:

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 Ответ

1 голос
/ 26 июля 2011

Стандартный распознаватель не может оценить вызов метода с параметрами. Вот несколько решений:

Использование свойства temp в вашем bean-компоненте:

<c:set target="${roleManager}" property="roleId" value="${roleId}"/>
<c:set var="roleIdValue" value="#{roleManager.roleStatus}" />

Также вам необходимо добавить следующий код к вашему бобу:

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 resolver, или также вы можете реализовать собственное решение, как описано здесь: http://technology.amis.nl/blog/622/how-to-call-methods-from-el-expressions-pre-jsp-20-trick-for-jsps-with-jstl

...