【发布时间】:2013-03-14 20:53:25
【问题描述】:
当我这样做时:
<h:form>
<ui:repeat ...>
<ui:fragment rendered="#{xyz.type eq 1}"
<h:inputText value="#{xyz}"/>
</ui:frament>
<ui:fragment rendered="#{xyz.type eq 2}"
<my:component value="#{xyz}"/>
</ui:frament>
<ui:repeat />
</h:form>
encodeAll() 不会在 my:component 上被调用,因此现有值不会显示。
如果我执行以下操作
<ui:repeat ...>
<ui:fragment rendered="#{xyz.type eq 1}"
<h:inputText value="#{xyz}"/>
</ui:frament>
<ui:fragment rendered="#{xyz.type eq 2}"
<h:form>
<my:component value="#{xyz}"/>
</h:form>
</ui:frament>
<ui:repeat />
后一个例子当然没用,因为我想要动态输入。现有(默认)组件如 datepicker、inputtext、... 功能正常,只有我的组件不显示现有值(未调用 encodeAll)。
我还尝试了 h:datatable 组件而不是 ui:repeat(但不知道为什么),结果相同。
INFO: Initializing Mojarra 2.1.6 (SNAPSHOT 20111206) for context '/webclient'
INFO: Running on PrimeFaces 3.5
INFO: Running on PrimeFaces Extensions 0.6.3
【问题讨论】:
-
是自定义组件(Java)还是复合组件(XHTML)?您的问题标题和问题标签相互矛盾。要了解区别,请阅读stackoverflow.com/questions/6822000/…
-
这是一个自定义组件 balusc.blogspot.de/2013/01/… - 灵感来自您的代码
-
这不完全是自定义组件,而是复合组件。
-
我发布了一个答案,但在未来,请提供一个真正的 SSCCE,而不是过于简单的 sn-p,它在 copy'n'paste'n'runned 时根本不会重现问题进入一个空白的游乐场环境。
标签: java jsf jsf-2 composite-component