我对数据表选择有一些奇怪的问题(很可能我做错了)。
想法很简单 - 可选择数据表和编辑记录的对话框。问题是,如果我使用<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>
Backing bean不是其他访问者。
我发现的另一件事是,如果我用<h:inputtext>
替换<h:inputText value="static text"/>
中的el表达式(如{{1}}),则会显示。
这是一些图片:
inputtext http://img716.imageshack.us/img716/1733/inputl.png
outputtext http://img685.imageshack.us/img685/5789/outputxc.png
static text http://img825.imageshack.us/img825/430/statice.png
primefaces 3.4
答案 0 :(得分:1)
您似乎已经想到的问题是您将对话框本身放在表单中。这是一个问题,因为jQuery对话框控件的工作方式,这是Primefaces对话框的客户端基础。本质上,它会将与对话框关联的DOM元素移动到其他位置,可能在您打算将其封闭的表单之外。
通过将对话框放在窗体外部,并将窗体放在对话框体内,可以很容易地解决这个问题。
<p:dialog id="dialogId" ...>
<h:form id="dlgForm">
....
</h:form>
</p:dialog>
通过这种方式,当jQuery UI将对话框控件移动到DOM中的其他位置时,该DOM的内容(包括表单)随之附带。