JSF渲染不适用于表单元素

时间:2011-08-05 19:00:27

标签: jsf jsf-2 primefaces

我在composite内显示dialog。我有一个edit按钮,用于获取当前bean @SessionScoped(数据表中的项),然后更新UI。我的应用程序非常类似于http://balusc.blogspot.com/2010/06/benefits-and-pitfalls-of-viewscoped.html这样的简单CRUD应用程序。

问题是在使用<h:outputText/>时UI正确更新,但在使用表单元素时却没有。

<h:inputTextarea value="#{cc.attrs.managedBean.assertionStatement}" />
<h:inputText value="#{cc.attrs.managedBean.assertionStatement}" />
<h:outputText value="#{cc.attrs.managedBean.assertionStatement}"/>

UI显示空textareainput,但outputText呈现正确的值。 getAssertionStatement()被称为3次,这似乎是正确的行为。

当我关闭对话框并重新打开它时,将填充所有内容(表单元素)。

对话框调用(ag命名空间用于复合组件):

    <p:dialog widgetVar="DataValueRuleDialog" modal="true" height="600" width="800">
        <p:outputPanel id="DataValueRulePanel">
            <ag:DataValueAssertion managedBean="#{dataValueAssertionController}" id="DataValueComposite" />
        </p:outputPanel>
    </p:dialog>

调用另一个复合词的复合词:

    <h:form id="DataValueForm">
        <ag:assertionMetadataComponent
            managedBean="#{cc.attrs.managedBean.dataValueAssertionBean.assertionMetadataBean}"
            assertionStatementRows="5" />

        <p:dataTable value="#{cc.attrs.managedBean.model}" var="item">
            <p:column>
                <f:facet name="header">Assertion Statement</f:facet>
                <h:outputText rendered="#{item.profileBean.profileLocation == cc.attrs.managedBean.selectedComformanceProfile.name}" value="#{item.assertionMetadataBean.assertionStatement}" />
            </p:column>
            <p:column>
                <p:commandButton rendered="#{item.profileBean.profileLocation == cc.attrs.managedBean.selectedComformanceProfile.name}" value="edit" immediate="true"
                actionListener="#{cc.attrs.managedBean.editDataValueAssertion}" update=":DataValueComposite:DataValueForm">
                </p:commandButton>
            </p:column> 
        </p:dataTable>
    </h:form>

当我删除immediate=true时,表单已经过验证,并且由于缺少必填字段之一(应该填充),我收到了验证错误。这就是为什么我有immediate=true,但它应该是必要的,因为数据表中的所有项都应该有效。

0 个答案:

没有答案