У меня есть dataTable с использованием Primefaces 3.5, как показано на рисунке below.Первичные данные DataTable не обновляют отображаемое значение с помощью кавычки, если атрибут значения <p: selectOneMenu> и <h: outputText> отличается от
Теперь я редактирую вторую строку с идентификатором 43, как показано в следующем image.
Когда я нажимаю клеща (крайний правый столбец), строка редактируется, как можно видеть в следующем picture.
Можно легко заметить, что название государства изменяется от xxxx
до zzz
, но страна по-видимому, остаются теми же, которые, как ожидается, будет обновлен до America
от Germany
.
Фактически, изменения были внесены в базу данных, но они, похоже, не отражаются на dataTable по завершении события rowEdit
.
Чтобы следить за изменениями, внесенными в страну, необходимо перезагрузить страницу. Только когда эта страница перезагружается, она отображает правильные данные, как показано на рисунке below.
Это столбец, в котором перечислен ниспадающая стране.
<p:ajax event="rowEdit" listener="#{stateManagedBean.onRowEdit}" update=":form:dataTable :form:systemMessages :form:messages" process=":form:dataTable :form:systemMessages :form:messages"/>
<p:ajax event="rowEditCancel" listener="#{stateManagedBean.onRowEditCancel}" update=":form:systemMessages :form:messages" process=":form:systemMessages :form:messages"/>
<p:column headerText="Country" sortBy="#{state.country.countryName}" filterBy="#{state.country.countryName}" filterMaxLength="45">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{state.country.countryName}" />
</f:facet>
<f:facet name="input">
<p:selectOneMenu id="cmbCountryMenu" value="#{state.country.countryId}" rendered="true" editable="false" converter="#{longConverter}" converterMessage="The supplied value is incorrect." required="true" requiredMessage="Select an appropriate option." style="width:100%;">
<f:selectItems var="country" value="#{stateManagedBean.countries}" itemLabel="${country.countryName}" itemValue="${country.countryId}" itemLabelEscaped="true" rendered="true"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
И следующий будет onRowEdit()
метод (в JSF управляемый компонент), который срабатывает, когда клещ нажата.
public void onRowEdit(RowEditEvent event)
{
StateTable stateTable=(StateTable) event.getObject();
if(stateService.update(stateTable))
{
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Success : ", "The row with the id "+stateTable.getStateId()+" has been updated successfully.");
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
Полный код JSF managed bean и JSF page.
В методе rowEdit()
(как описано выше), stateTable.getCountry().getCountryId()
отображает обновленный countryId
, но с помощью этого объекта страны ссылаться на имя соответствующей страны, как stateTable.getCountry().getCountryName()
просто отображает старое название страны (не обновляется один). Каков способ обойти это?
Важно:
В XHTML фрагменте кода выше, значения атрибута обоих,
<h:outputText value="#{state.country.countryName}"/>
^^^^^^^^^^^^^_^^^^^^^^^^^
<p:selectOneMenu id="cmbCountryMenu" value="#{state.country.countryId}" .../>
^^^^^^^^^^^^^_^^^^^^^^^
отличается, который имеет важное значение для отображения названий стран вместо отображения идентификаторов стран и ссылаясь на соответствующие идентификаторы стран.
Если они будут изменены, чтобы отразить тот же атрибут value
,
<h:outputText value="#{state.country.countryId}"/>
^^^^^^^^^^^^^_^^^^^^^^^
<p:selectOneMenu id="cmbCountryMenu" value="#{state.country.countryId}" .../>
^^^^^^^^^^^^^_^^^^^^^^^
затем он работает, как ожидалось (Primefaces витрина пример (ы) демонстрации (ы) так же, как это).
Это то же самое, что и обновление значения нижнего колонтитула, динамически показывающее общее число числовых значений столбца. Нижний колонтитул не обновляется при обновлении строки в этом столбце. Сообщено о проблеме here.
Попробуйте следовать этому примеру http://www.primefaces.org/showcase/ui/datatableRowEditing.jsf и посмотреть, чего не хватает. – Makky
В этом примере витрины значение '' и '' совпадает с значением 'value =" # {car.color} "'. Выполнение этого, также работает в моем случае (я всегда смотрю примеры демонстрации, прежде чем я начну с них). В моем случае, однако, значение как '', так и '' отличается от значения 'value =" # {state.countryId.countryName} "и' value = "# {state .countryId.countryId} "' соответственно. Это не работает должным образом. –
Tiny
поместите его в форму, затем обновите форму, если событие изменения выполнено. – Farnsbert