2011-07-26 27 views
3

私はjstlにコードを書いています。私は、HTMLを実行中に次のエラーが表示されます。jstlの値を取得する方法

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

標準ELリゾルバはパラメータでメソッド呼び出しを評価することができません。ここ は、いくつかの解決策があります:あなたの豆で一時プロパティを使用して

:機能を使用して

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; 
} 

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

また、あなたはあなたのBeanに次のコードを追加しなければなりません

ページ:

${prefix:methodName(param1, param2, ...)} 

そして、あなたはタグライブラリ内の関数を宣言する必要があります。パラメータとして

<function> 
<name>methodName</name> 
<function-class>className</function-class> 
<function-signature> 
    returnType methodName(param1Type, param2Type, ...) 
</function-signature> 

あなたのroleManager自身と引数を使用することができます。ここで説明するようにも、あなた自身のソリューションを実装することができます例のJBoss ELリゾルバ、 ため

使用か::メソッド呼び出しを可能にエル・リゾルバを使用して

http://technology.amis.nl/blog/622/how-to-call-methods-from-el-expressions-pre-jsp-20-trick-for-jsps-with-jstl

関連する問題