roe*_*oel 7 datatable jsf listbox primefaces
我有一个带有rowedit的数据表.我的表的一列是一个列表框中的单元格,列表框中的项目是动态检索的(取决于另一个单元格中的值)我使用rowEditInit来设置selectedrow项目.我想更新列表框以检索正确的值.这不起作用.当我做
<p:ajax event="rowEditInit" listener="#{workOrderDetail.onEdit}" update="orderitemstable" />
Run Code Online (Sandbox Code Playgroud)
然后,当我单击铅笔图标时,我可以看到行切换到编辑模式并重新启动列表框项目.但它直接切换回非编辑模式.
但是,当我这样做
<p:ajax event="rowEditInit" listener="#{workOrderDetail.onEdit}" update="rmactionenumid" />
Run Code Online (Sandbox Code Playgroud)
然后单击铅笔图标将行置于编辑模式,但不会调用以检索列表框项.我的观点是,它不会触发rmactionenumid的更新.
有任何想法吗?
罗埃尔
这是我的jsf代码
<p:ajax event="rowEditInit" listener="#{workOrderDetail.onEdit}" update="rmactionenumid" />
<p:column >
<p:cellEditor>
<f:facet name="output">
<h:outputText id="rmactionenumidlabel" value="#{orderItem.rmActionRepr}" >
</h:outputText>
</f:facet>
<f:facet name="input">
<h:selectOneListbox id="rmactionenumid" value="#{orderItem.rmActionEnumId}" size="1" valueChangeListener="#{workOrderDetail.setActionRepr}">
<f:selectItems value="#{workOrderDetail.actionItems}"/>
<p:ajax event="change" update="partdiscount,labourdiscount,totalprice,:detail:wodetail:totals" execute="@this" />
</h:selectOneListbox>
</f:facet>
</p:cellEditor>
</p:column>
<p:column >
<p:rowEditor id="edit" />
</p:commandLink>
</p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
这是我的java bean代码
public List<SelectItem> getActionItems() throws MWSException {
ArrayList<SelectItem> actions = new ArrayList<SelectItem>();
if (getSelectedOrderItem() != null) {
ListManager lm = new ListManager(getWA().getMwsProxy());
MWSGenericMapList items = lm.nativeSearch(getWS().getUser(), HdfWebConstants.NS_VEHICLEPARTACTIONS, 0, 0, 200,
false, getSelectedOrderItem().getVehiclePartCode());
for (int i = 0; i < items.size(); i++) {
actions.add(new SelectItem(items.get(i).get("rmaction_enumid").toString(), items.get(i).get("rmaction")
.toString()));
}
}
return actions;
}
public void setSelectedOrderItem(IMWSOrderItem newSelectedOrderItem) throws MWSException {
this.selectedOrderItem = newSelectedOrderItem;
}
public void onEdit(RowEditEvent event) throws MWSException {
setSelectedOrderItem((IMWSOrderItem) event.getObject());
}
Run Code Online (Sandbox Code Playgroud)
我正在使用PF3.5
Bal*_*usC 17
它失败,因为update="rmactionenumid"在此构造中相对于表本身,而不是当前表行.
基本上,它正在寻找具有客户端ID的组件,formId:tableId:rmactionenumid而不是例如第二行formId:tableId:1:rmactionenumid.从技术上讲,<p:ajax>应该放在内部<p:column>,但这不适用于rowEditInit事件.
您需要update根据UIData可用作RowEditEvent参数的组件编写自己的客户端ID ,并将组合的客户端ID添加到PartialViewContext#getRenderIds().
因此,删除<p:ajax update>并扩展onUpdate()方法如下:
public void onEdit(RowEditEvent event) {
UIData table = (UIData) event.getComponent();
String updateClientId = table.getClientId() + ":" + table.getRowIndex() + ":rmactionenumid";
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(updateClientId);
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14122 次 |
| 最近记录: |