0

私を夢中にさせている問題があります。複合コンポーネントから値を表示しようとしています。しかし、印刷されることはありません。

<cc:interface>
    <cc:attribute name="parts" type="java.util.List" required="true""/>
    <cc:attribute name="context" type="String" required="true""/>
</cc:interface>

<!-- IMPLEMENTATION -->
<cc:implementation>
...
            <c:forEach items="#{cc.attrs.parts}" var="part">
...
                    <td>#{part.roles(cc.attrs.context)}</td>
...
            </c:forEach>
...
</cc:implementation>

背後のメソッド#{part.roles(cc.attrs.context)}が呼び出されることはありません (エラーも印刷もありません)。

使用する#{part.roles("Example")}と、次のものが得られます。

javax.el.ELException: /resources/utils/parts.xhtml: Method not found: class com.ex.Part.roles(java.lang.String)

との両方partscontext値があり (私はそれらを印刷できます)、#{part.roles}実際に HashMap を印刷します。何か不足していますか?

public class Part implements Serializable {

    private HashMap<String, String> roles;
....
    // This can be called OK
    public HashMap<String, String> getRoles() {
        return roles;
    }

    public String getRoles(String id) {
    //Never called
        if ((roles != null) && (id != null)) {
            return roles.get(id);
        }
        return null;
    }
}

編集

最初のエラーは、呼び出し部分が次のようになることです。

#{part.getRoles(cc.attrs.context)}

したがって#{part.getRoles("Hello")}、少なくとも使用すると、メソッドが正しく呼び出されます。しかしcc.attrs.context、引数として適切にレンダリングされていません (メソッドは呼び出されていません) #{cc.attrs.context}


編集2

おかしな。これは機能します

<c:set var="ci" value="#{cc.attrs.context}" scope="request"/>
<td>#{part.getRoles(ci)}</td>

これは単なるバグなのだろうか


編集3

TomEE 1.7.4 を使用しています。

pom.xmlは持っています:

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version> <!-- TomEE only supports 6.0 -->
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.faces</artifactId>
        <version>2.2.13</version>
        <scope>runtime</scope>
    </dependency>

2 番目の依存関係が必要な理由はわかりませんが (TomEE で十分であるはずでした)、それがないと、プログラムは次のエラーを返します。

Could not get component metadata for xxx.xhtml. Did you forget to specify <composite:interface>?
4

0 に答える 0