首先,我的项目预设: - JSF 2.2(Mojarra) - PrimeFaces 3.5
我的问题是:
我在所有行中都有一个带有selectBooleanCheckBox的数据表。当我选择我希望用某些信息更新的项目时,我点击按钮显示一个带有一个inputMask的模态和一个提交它的按钮。在我的managedBean中,我获得了之前由selectBoolean复选框选择的所有项目,并在项目中应用了信息。
错误与提交有关。在我向managedBean提交值的地方,标记的项目不会出现,但如果将其放在模态视图之外,则可以正常工作。
这是一段代码:
<ui:composition>
<ui:define>
<p:layout>
<p:layoutUnit id="west">
...
</p:layoutUnit>
<p:layoutUnit id="center">
<h:form id="pg_tabs">
<p:commandButton id="btn_ros_form"
rendered="#{p:ifAnyGranted('ROLE_PROJECT_MANAGER')}"
icon="ui-icon-pencil"
onclick="modal_ros.show();"
value="#{msg['research.button.apply.ros']}"
type="button" />
.
.
.
<p:tabView>
<p:tab>
<ui:include src="pages/dataTablePiece.xhtml"/>
</p:tab>
.
.
.
</p:tabView>
<p:dialog id="dialog_ros_date"
header="#{lmsg['research.dialog.ros.date.header']}"
widgetVar="modal_ros"
modal="true"
appendToBody="true">
<h:panelGrid columns="2" cellpadding="3">
<h:outputText value="#{msg['research.filter.ROSDate']}" />
<p:inputMask value="#{research.ros}"
mask="99/99/9999" />
<p:commandButton id="btn_apply_ros_date"
actionListener="#{research.changeROSDate}"
ajax="true"
update="#{p:component('pg_tabs')}"
value="#{msg['research.button.apply']}" />
<p:commandButton id="btn_clear_ros_date"
ajax="true"
update="#{p:component('pg_tabs')}"
actionListener="#{research.clearROSDate}"
value="#{msg['research.button.cleanROS']}" />
</h:panelGrid>
</p:dialog>
</h:form>
</p:layoutUnit>
</p:layout>
</ui:define>
</ui:composition>
这是包含的页面“dataTablePiece.xhtml”:
<p:dataTable id="dt_pro_man"
var="item"
value="#{research.items}"
paginator="true"
paginatorPosition="bottom"
rows="15"
rowKey="#{item.itemId}"
stickyHeader="true" >
<p:column rendered="#{not p:ifGranted('ROLE_SUPPLIES')}">
<f:facet name="header">
<p:selectBooleanCheckbox value="#{research.allSelected}">
<p:ajax update="dt_pro_man" listener="#{research.selectAll}" />
</p:selectBooleanCheckbox>
</f:facet>
<p:selectBooleanCheckbox value="#{item.selected}" update="dt_pro_man" immediate="true" />
</p:column>
<p:column sortBy="#{item.nrSc}">
<f:facet name="header">
<h:outputText value="#{msg['import.table.sc.number']}" />
</f:facet>
<h:outputText value="#{item.nrSc}" />
</p:column>
.
.
.
<!-- other columns -->
<p:datatable>
Finnaly,我的managedBean方法:
public void changeROSDate(ActionEvent event){
Date newRosDate;
try {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
newRosDate = sdf.parse(ros);
List<Item> selectedItems = getSelected(items);
if(Assert.isNotNullOrEmpty(selectedItems)){
for(Item item : selectedItems){
if (newRosDate.after(item.getDtRegistration())) {
item.setDtLimit(newRosDate);
service.save(item, StatusType.Included);
} else {
Faces.errorMessage(i18n.getMessage("research.mb.error.ros.before.registration"));
return;
}
}
Faces.infoMessage(i18n.getMessage("research.mb.success.update.items"));
}else {
Faces.infoMessage((i18n.getMessage("research.mb.info.select.one.item")));
}
} catch (Exception e) {
Faces.errorMessage(i18n.getMessage("research.mb.error.update.item"));
}
}
如果您需要更多代码或更多详情,请告诉我。
感谢您的帮助,对不起的英语感到抱歉。