如何使用c:foreach和其他字段之后呢?

时间:2011-09-19 20:19:02

标签: java jsf richfaces

我的问题是,在我的主页中,我完全得到变量capacidade。 然后我在那里c:forEach和另一个名为"nome"的字段。 当我尝试保留时,我会填充capacidade字段,但"nome"属性来null。 我看到如果我在c:forEach之前推他,那就行了。但是我需要在c:forEach字段后保留他。

<s:decorate template="layout/form.xhtml">
            <ui:define name="label">capacidade:</ui:define>
            <h:inputText size="50" value="#{home.instance.capacidade}" maxlength="100" required="true" />
        </s:decorate>

        <a4j:outputPanel id="camposPresenca">
            <c:forEach items="#{home.presencas}" var="presenca" varStatus="loop">
                <s:decorate template="layout/form.xhtml">
                    <ui:define name="label">Presença #{loop.index + 1}</ui:define>
                    <rich:calendar enableManualInput="true" value="#{presenca.dataPresenca}" datePattern="dd/MM/yyyy" oninputblur="validarData(this);" required="true"/>
                    <h:inputText size="100" value="#{presenca.horarioPresenca}" maxlength="250" />
                </s:decorate>
            </c:forEach>
        </a4j:outputPanel>

        <s:decorate template="layout/form.xhtml">
            <ui:define name="label">Nome:</ui:define>
            <h:inputText size="50" value="#{home.instance.nome}" maxlength="100" required="true" />
有人知道如何解决这个问题吗?             

2 个答案:

答案 0 :(得分:6)

使用<ui:repeat>代替<c:forEach>后者不是组件,并且在构建页面后不属于树组件。

了解更多in this article

一般情况:JSTL元素会破坏ViewScope bean。

答案 1 :(得分:0)

看起来home.getInstance()不是线程安全的。

你可能有更大的问题需要在这里解决,但是一个创可贴解决方案是在进行布局之前保存实例值。

将此代码放在您的代码段之前

<c:set var="home_instance" value = "${home.instance}"/>

home.instance替换为home_instance