1

私は豆を持っています:

class Property{
 private String type;
 private Date value;
 //getters and setters
}

ページにコードブロックもあります:

<ui:fragment rendered="#{property.type eq 'checkbox'}">
    <ui:include src="checkbox.xhtml">
        <ui:param name="property" value="#{property}"/>
    </ui:include>
</ui:fragment>

チェックボックス.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">
    <body>
        <ui:composition>
            <h:selectBooleanCheckbox value="#{property.value}"/>
        </ui:composition>
    </body>
</html>

条件 #{property.type eq 'checkbox'} = false

しかし、次の例外が発生します:

javax.servlet.ServletException: checkBox.xhtml value="#{property.value}": Cannot convert 01.11.02 0:00 of type class java.util.Date to class java.lang.Boolean

ui:include で属性 render=false の場合、このブロックは処理されないことが予想されます。

4

1 に答える 1

2

<ui:fragment rendered>HTML 出力をレンダリングすることはできませんが、JSF コンポーネント ツリーで終了し、状態保存の対象となることは妨げられません。

<c:if test>代わりに使用してください。ビューのレンダリング時間ではなく、ビューのビルド時に実行されるため、束全体が JSF コンポーネント ツリーに収まることはありません。

または、これらすべてが 内にあり<ui:repeat var="property">、Mojarra を使用している場合は、少なくとも 2.1.29 または 2.2.7 にアップグレードしてください。これにより、この状態保存バグが修正されました。

以下も参照してください。

于 2015-02-17T14:23:07.347 に答える