【发布时间】:2013-11-28 08:03:27
【问题描述】:
总的来说,我对 PrimeFaces 和 JSF 还是很陌生,我找不到类似情况的主题。 我检查了我没有嵌套表格。似乎我遇到了一些奇怪的行为 - 至少我不知道它为什么会这样做;)
假设我有一个列表。 “模块”类有一个列表。我的目的是在表格中显示数据,并按模块和其下的行中的元素很好地分组。 似乎 subtable 是我的愿望成真了,但我发现它只是用于报告问题,所以它是不可选择的。不幸的是,我需要知道在模块上运行“删除”或“编辑”等操作的选择。 我尝试在子表方面放置一个按钮,其中一个 actionlistener 在支持 bean 中设置当前对象,然后打开一个对话框以提供进一步的操作(在选定的模块上)。我一开始以为它可以工作,但后来注意到按下同一个按钮,一个随机的模块对象被转移到了 backing bean。
<p:dataTable id="displayModules" var="displayModuleBean"
value="#{displayModuleController.displayModuleBeans}"
emptyMessage="Es existieren keine Module für diese Kampagne.">
<p:row>
<p:column headerText="Vermarkter" />
<p:column headerText="Platzierung" />
<p:column headerText="Umfeld" />
<p:column headerText="Format(e)" />
<p:column headerText="Startdatum" />
<p:column headerText="Enddatum" />
<p:column headerText="Abrechnungsart" />
</p:row>
<p:subTable id="displayModuleElements" var="displayModuleElement"
value="#{displayModuleBean.moduleElements}"
sortBy="#{displayModuleBean.module.name}" sortOrder="descending">
<f:facet name="header" style="vertical-align: middle">
#{displayModuleBean.module.name}
<p:commandButton alt="Modul bearbeiten" icon="ui-icon-pencil"
style="float:right"
actionListener="#{displayModuleController.setSelectedDisplayModuleBean(displayModuleBean)}"
oncomplete="displayModuleEditDialog.show();"
update=":tabview:displayModulesDialogForm:editDisplayModules">
</p:commandButton>
</f:facet>
<p:column headerText="Vermarkter">
<h:outputText value="#{displayModuleElement.advertiserName}" />
</p:column>
</p:subTable>
</p:dataTable>
Backing Bean (DisplayModuleController, SessionScoped):
public void setSelectedDisplayModuleBean(ModuleBean selectedDisplayModuleBean)
{
this.selectedDisplayModuleBean = selectedDisplayModuleBean;
this.setSelectedDisplayModuleName(this.selectedDisplayModuleBean != null ? this.selectedDisplayModuleBean.getModule().getName()
: null);
this.addFacesMessage(FacesMessage.SEVERITY_INFO, "Set selected ModuleBean: ",
this.selectedDisplayModuleBean != null ? this.selectedDisplayModuleBean.getModule().getName() : "keins");
}
我什至尝试了在每个选项卡上使用 Accordion Panel 和 Datatables 的解决方法,但我以同样奇怪的行为结束。我还尝试在每一行中添加一个按钮来传输所选元素本身(不是父模块),但随机方式完全相同。
我到底错过了什么?如果有人可以帮助我走上正确的道路,那就太好了;)
我正在使用: PrimeFaces 4.0, 我的面孔 2.1.13, Apache Tomcat 7.0.42
LG, 阿尼
【问题讨论】:
-
很抱歉把它放在评论中,但也许你会更幸运
<f:setPropertyActionListener>- 就像这样:<p:commandLink alt="Modul bearbeiten" icon="ui-icon-pencil" style="float:right" process="@this" oncomplete="displayModuleEditDialog.show();" update=":tabview:displayModulesDialogForm:editDisplayModules"> <f:setPropertyActionListener target="#{displayModuleController.selectedDisplayModuleBean}" value="#{displayModuleBean}" /> </p:commandLink> -
如果
displayModuleElement与displayModuleBean是相反的关系,那么您可以尝试<f:setPropertyActionListener target="#{displayModuleController.selectedDisplayModuleBean}" value="#{displayModuleElement.displayModuleBean}" />,但坦率地说,不认为它会改变任何东西。
标签: jsf primefaces datatable commandbutton