jsf - primefaces 数据表 rowedit 不更新单元格元素

标签 jsf primefaces datatable listbox

我有一个带有 rowedit 的数据表。 我的表格的一列是一个带有列表框的单元格,列表框的项目是动态检索的(取决于另一个单元格中的值) 我使用 rowEditInit 来设置 selectedrow 项目。我想更新列表框以检索正确的值。 这是行不通的。 当我这样做时

<p:ajax event="rowEditInit" listener="#{workOrderDetail.onEdit}" update="orderitemstable" />

然后,当我单击铅笔图标时,我可以看到行切换到编辑模式并检索列表框项目。但直接切换回非编辑模式。

但是当我这样做时

<p:ajax event="rowEditInit" listener="#{workOrderDetail.onEdit}" update="rmactionenumid" />

然后单击铅笔图标将该行置于编辑模式,但不会调用来检索列表框项目。我的猜测是,它不会触发 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>

这是我的 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());

}

我使用的是 PF3.5

最佳答案

它失败了,因为 update="rmactionenumid"在此构造中相对于表本身,而不是相对于当前表行。

基本上,它正在寻找客户端 ID 为 formId:tableId:rmactionenumid 的组件而不是例如第二排formId:tableId:1:rmactionenumid 。从技术上讲,<p:ajax>应放置在 <p:column> 内,但这不适用于 rowEditInit事件。

您需要编写自己的 update基于 UIData 的客户端 ID组件,可用作 RowEditEvent参数并将组合的客户端 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);

    // ...
}

关于jsf - primefaces 数据表 rowedit 不更新单元格元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20901447/

相关文章:

jsf - 我需要 jsf-api 或 jsf-impl 还是两者都需要才能开始使用 JSF?为什么不合并?

eclipse - 更改了 Tomcat 中的 JSF 实现。从 Mojarra 到 MyFaces。托管 Bean 不起作用

java - 在 Java Server Faces 中将托管属性与 CommandButton 一起使用

css - 最大化窗口中的 HTML5 视频而不会溢出

vb.net - 不要对 XSD 生成的 DataTable 类的空日期抛出异常

jsf - <ui :param> in JSF? 的范围是什么

jsf-2 - List<Integer> 收到 List<String>

java - 如何从 Java 访问 Primefaces 数据表行

jsf - 无法以编程方式设置 DataTable 的初始排序顺序

c# - SQL C# 交互不起作用