JSFコンポーネントを実装していて、条件付きでいくつかの属性を追加する必要があります。この質問は以前のJSFに似ています。f:attributeを指定したp:dataTableでは「引数タイプの不一致」エラーが発生しますが、エラーメッセージがまったく異なるため、新しい質問を作成しました。
<composite:interface>
<composite:attribute name="filter" required="false" default="false"
type="java.lang.Boolean"/>
<composite:attribute name="rows" required="false" default="15"
type="java.lang.Integer"/>
...
</composite:interface>
<composite:implementation>
<p:dataTable ivar="p" value="#{cc.attrs.dm}">
<c:if test="#{cc.attrs.filter}">
<f:attribute name="paginator" value="#{true}"/>
<f:attribute name="rows" value="#{cc.attrs.rows}"/>
</c:if>
...
<p:dataTable>
</composite:implementation>
これにより、エラーが発生しますjava.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
。これを手動で設定しても、エラーが発生します。
<f:attribute name="rows" value="15"/> ... argument type mismatch
<f:attribute name="rows" value="#{15}"/> ... java.lang.Long cannot be cast
to java.lang.Integer
属性を直接追加すると、例外はなく、正しい行数が表示されます。
<p:dataTable var="p" value="#{cc.attrs.dm}" rows="#{cc.attrs.rows}">