当前位置: 首页 > 知识库问答 >
问题:

更新P:RemoteCommand属性工作原理

左丘智渊
2023-03-14

Primefaces 6.0。我理解,p:remoteCommand的update属性应该用于指定Ajax应该更新的组件的clientID。我在试着了解PF是如何工作的。它与DataTable结合使用似乎并不像预期的那样工作。当我尝试直接设置update=“form:dataTable:2:bcolumn”时,它没有任何影响。但是,执行此操作(在下面的代码中注释掉)RequestContext.GetCurrentInstance().update(“Form:DataTable:2:BColumn”);将强制PF更新指定的OutputText。

为什么会出现这种情况?我会为技术解释感到高兴--我正试图通过调试PF Java/JavaScript源代码来找到答案。

<h:form id="form">
    <p:remoteCommand name="remoteCall"
                     action="#{grid4.onEdit}"
                     update="form:dataTable:2:bColumn"
    />

    <p:dataTable id="dataTable"
                 var="gridItem"
                 value="#{grid4.gridItems}"
                 editable="true" editMode="cell"
    >

        <p:ajax event="cellEdit"
                oncomplete="remoteCall()">
        </p:ajax>

        <p:column headerText="A">
            <p:cellEditor>
                <f:facet name="output"><h:outputText value="#{gridItem.a}" /></f:facet>
                <f:facet name="input"><p:inputText value="#{gridItem.a}"/></f:facet>
            </p:cellEditor>
        </p:column>
        <p:column headerText="B">
            <h:outputText id="bColumn" value="#{gridItem.b}" />
        </p:column>
    </p:dataTable>

</h:form>

豆子

@ManagedBean
@ViewScoped
public class Grid4 {
    private List<GridItem> gridItems = new ArrayList<>();


    public Grid4() {
        gridItems.add(new GridItem("1", "a","b"));
        gridItems.add(new GridItem("2", "a","b"));
        gridItems.add(new GridItem("3", "a","b"));
    }

    public void onEdit() {
        System.out.println("onEdit()");
        gridItems.get(2).setB("CHANGED VALUE");
//        RequestContext.getCurrentInstance().update("form:dataTable:2:bColumn");
    }

    public List<GridItem> getGridItems() {
        return gridItems;
    }

    public void setGridItems(List<GridItem> gridItems) {
        this.gridItems = gridItems;
    }

}

共有1个答案

曾承弼
2023-03-14

基本上,jsf ids和客户端ids是两回事(查看这个答案和这篇文章以获得更好的理解)。

当您使用RequestContext.GetCurrentInstance().update(“Form:DataTable:2:BColumn”);时,该方法使用客户端id查找必须更新组件,但是对于p:RemoteCommandupdate属性,它需要的是一个jsf id,而不是生成的客户端id,因此更新不起作用。但是,primefaces支持jquery选择器来更新组件,因此您可以在update属性上使用客户端id,如以下update=“@(#YouRelementId)”

 类似资料:
  • 问题内容: 在数据加载中,似乎某些XML属性映射不正确,我现在正尝试纠正此问题,但在MySQL对XML列的处理方面遇到了麻烦。 我想为带有子字段(属性为’code =“ 3”’)的字段(属性为’tag =“ 520”’)的所有出现的字段纠正XML属性(非值)。下面的查询返回受影响的0行,找到1行。关于如何实现这一目标的任何线索。 为了清晰起见,包含了XML片段: 原始片段 结果是我想要的: 无法解

  • Hibernate的property元素具有update、insert属性,根据文档,它声明-http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-声明属性 update,insert(可选-默认为true):指定映射列应包含在SQL update和/或insert语句中。将两者都设置为f

  • 问题内容: 我正在NHibernate中对单个属性执行标准更新。但是,在提交事务时,sql更新似乎设置了我映射到表上的所有字段,即使它们没有更改。当然这不是Nhibernate中的正常行为吗?难道我做错了什么?谢谢 问题答案: 这是正常现象。您可以尝试添加到类定义中以覆盖此行为。

  • 操作步骤: ●单条字段属性更新 ①在"图层管理"模块,选择一个带有数据的图层,点击"数据视图"。 ②双击击字段属性内容,进入编辑状态,进行编辑。 ③编辑完成后点击"确定"按钮,属性内容更新成功。 提示: ●批量更新属性内容。 操作动图: [查看原图]

  • 我遵循了这个官方教程使用Spring boot 2.0.0开始集中配置。RELEASE和Spring cloud Finchley。M8 但是动态刷新属性(不重新启动)不起作用。经过一些调试,我注意到ContextRefresh中的refresh()方法。类,它将正确返回更改后的键,但在下次使用中重建用@RefreshScope注释的bean之后。它仍然看到旧的值,而不是更新的值。 注意:这与Sp

  • 问题内容: 第一次使用Java开发,第一次使用Android开发,因此这是一个新手问题。 我目前有以下代码: 简短问题: 什么是 的.class 属性来完成,f.ex. 在’ C = NewTourny 的.class ‘? 为什么我不能将c转换为Tourny(所有这些类的父类)? 长问题: 目前,这可以处理整个应用程序中的所有按钮导航,并且工作正常。但是,如您所见,当我将c强制转换为Class时