h: inputText отображает пустым - PullRequest
1 голос
/ 24 января 2012

Я пытаюсь реализовать некоторые функции, показанные на веб-сайте PrimeFaces .P: commandButton в заголовке моего p: dataTable show ap: диалоговое окно, содержащее серию выводов меток / текста.Приведенный ниже пример работает ожидаемым образом:

DataTable:

<h:form id="form">
        <p:dataTable id="table" 
                     value="#{locationStockList.getDataModel(cc.attrs.collection)}"     
                     var="item"
                     selection="#{locationStockList.selected}"
                     selectionMode="single">

            <p:ajax event="rowSelect" listener="#{locationStockList.onRowSelect}"/>

            <f:facet name="header"> 
                <p:commandButton id="btnView" value="View"
                                 update=":form:panel" 
                                 oncomplete="dialog.show()"/>
            </f:facet>
            <p:column>
                <f:facet name="header">Stock Item</f:facet>
                <h:outputText value="#{item.stockItem.name}"/>
            </p:column>
            <p:column>
                <f:facet name="header">Location</f:facet>
                <h:outputText value="#{item.location.name}"/>
            </p:column>
            <p:column>
                <f:facet name="header">Quantity</f:facet>
                <h:outputText value="#{item.quantity}"/>
            </p:column>
            <p:column>
                <f:facet name="header">Price</f:facet>
                <h:outputText value="#{item.price}"/>
            </p:column>
        </p:dataTable>

Диалог

        <p:dialog id="dialog" widgetVar="dialog" header="Location Stock Form" width="700"
                  resizable="false" draggable="false" closable="false" modal="true">
            <h:panelGrid id="panel" columns="3">
                <h:outputLabel id="lblStockItem" for="stockItem" value="Stock Item"/>
                <h:outputText id="stockItem" value="#{locationStockList.selected.stockItem.name}"/>
                <p:message id="msgStockItem" for="stockItem"/>

                <h:outputLabel id="lblLocation" for="location" value="Location"/>
                <h:outputText id="location" value="#{locationStockList.selected.location.name}"/>
                <p:message id="msgLocation" for="location"/>

                <h:outputLabel id="lblPrice" for="price" value="Price"/>
                <h:outputText id="price" value="#{locationStockList.selected.price}"/>
                <p:message id="msgPrice" for="price"/>

                <h:outputLabel id="lblQuantity" for="quantity" value="Quantity"/>
                <h:outputText id="quantity" value="#{locationStockList.selected.quantity}"/>
                <p:message id="msgQuantity" for="quantity"/>
            </h:panelGrid>

            <f:facet name="footer">
                <p:commandButton value="Save" />
                <p:commandButton value="Cancel" oncomplete="dialog.hide()" />
            </f:facet>
        </p:dialog>
    </h:form>

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке реализовать одно и то же диалоговое окнокак панель редактирования / обновления.И измените h: outputText в диалоге p: на h: inputText, чтобы текстовые поля были пустыми.Единственное решение, которое я нашел для этой проблемы, это установить h: inputText в disabled = «true» или readonly = «true», в котором значения видны, но не редактируются.Чтобы быть конкретным:

Они оба показывают значения, но не позволяют модификацию:

<h:outputText id="price" value="#{locationStockList.selected.price}"/>
<h:inputText id="price" value="#{locationStockList.selected.price}" readonly="true"/>

Пока это делает пустым:

<h:inputText id="price" value="#{locationStockList.selected.price}"/>

1 Ответ

2 голосов
/ 24 января 2012

Поскольку таблица и диалоговое окно находятся внутри одинаковой формы, фактически вы также отправляете содержимое диалогового окна, нажимая кнопку в таблице. То, что вы видите, на самом деле представляют собой значения диалога. Когда установлено значение readonly или disabled, входные значения не будут отправлены и, следовательно, не будут переопределять значения модели.

Вам нужно либо , чтобы быть более точным в том, что должна обрабатывать кнопка (т.е. только @this)

<p:commandButton value="View" process="@this" update=":form:dialog" oncomplete="dialog.show()"/>

или для разделения таблицы и диалогового окна на 2 формы

<h:form>
    <p:dataTable>
        ...
    </p:dataTable>
</h:form>
<p:dialog>
    <h:form>
        ...
    </h:form>
</p:dialog>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...