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は、アクセサーに他なりません。

私が見つけたもう1つのことは、el式を<h:inputtext>静的テキスト(のような<h:inputText value="static text"/>)に置き換えると、それが表示されることです。ここにいくつかの写真があります:

inputtextとのダイアログ

入力テキスト

出力テキストとのダイアログ

outputtext

静的テキストとのダイアログ

静的テキスト

Primefaces 3.4

4

1 に答える 1

1

すでに理解しているように見える問題は、ダイアログ自体をフォーム内に配置していることです。これは、Primefacesダイアログのクライアント側の基盤であるjQueryダイアログコントロールの動作方法が原因で問題になります。基本的に、ダイアログに関連付けられているDOM要素を別の場所に移動します。おそらく、それを囲む予定のフォームの外に移動します。

この問題は、ダイアログをフォームの外側に配置し、代わりにフォームをダイアログ本体の内側に配置することで簡単に解決できます。

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

このように、jQuery UIがダイアログコントロールをDOMの他の場所に移動すると、フォームを含むそのDOMのコンテンツが付属します。

于 2013-01-17T13:46:24.390 に答える