1

我对数据表选择有一些奇怪的问题(很可能我做错了什么)。想法很简单 - 带有选择的数据表和编辑记录的对话框。问题是,如果我使用<h:inputText>标签(或<p:inputText>)它似乎是空白的,尽管支持 bean(indicatorBean.indicator.code)中的对象包含数据。有趣的是,如果我<h:outputText>输入而不是输入,则会显示数据。

这是我身体的内容

<!-- language: xml -->
<h:body>
    <h:form id="form">
        <p:growl id="messages" showDetail="true"/>
        <p:dataTable id="indicatorsTable" var="ind" 
                     value="#{indicatorBean.indicators}"
                     selectionMode="single" 
                     selection="#{indicatorBean.indicator}" 
                     rowKey="#{ind.id}">
            <p:column headerText="Name" style="width:125px">
                #{ind.name}
            </p:column>
            <p:column headerText="Code" style="width:125px">
                #{ind.code}
            </p:column>
            <f:facet name="footer">
                <p:commandButton id="viewButton" value="View" 
                                 icon="ui-icon-search" update=":form:display" 
                                 oncomplete="indDialog.show()"/>
            </f:facet>
        </p:dataTable>


        <p:dialog id="dialog" header="Indicator Detail" 
                  widgetVar="indDialog" resizable="false"
                  width="400" showEffect="fade" hideEffect="fade">

            <h:panelGrid id="display" columns="2" cellpadding="4">
                     <h:outputText value="Code:"/>
                     <!-- PROBLEM IS HERE --> 
                     <h:inputText value="#{indicatorBean.indicator.code}"/>

                     <h:outputText value="Name:"/>
                     <h:outputText value="#{indicatorBean.indicator.name}"/>
            </h:panelGrid>
            
            <p:commandButton value="Save" onclick="indDialog.hide()"/>
            <p:commandButton value="Cancel" onclick="indDialog.hide()"/>
        </p:dialog>
    </h:form>

</h:body>

支持 bean 就是访问器。

我发现的另一件事是,如果我用<h:inputtext>静态文本(如<h:inputText value="static text"/>)替换 el 表达式,它就会显示出来。以下是一些图片:

带有输入文本的对话框

输入文本

带有输出文本的对话框

输出文本

带有静态文本的对话框

静态文本

素面3.4

4

1 回答 1

1

您似乎已经发现的问题是您将对话框本身放置在表单中。这是一个问题,因为 jQuery 对话框控件的工作方式是 Primefaces 对话框的客户端基础。本质上,它将与对话框相关联的 DOM 元素移动到其他地方,可能超出您打算包含它的表单之外。

这个问题可以很容易地解决,方法是将对话框放在表单之外,而将表单放在对话框主体内。

<p:dialog id="dialogId" ...>
  <h:form id="dlgForm">
     ....
  </h:form>
</p:dialog>

这样,当 jQuery UI 将对话框控件移动到 DOM 中的其他位置时,该 DOM 的内容(包括表单)也会随之而来。

于 2013-01-17T13:46:24.390 回答