【问题标题】:I can't update from within a facet我无法从方面更新
【发布时间】:2012-08-16 13:17:05
【问题描述】:

我将 primefaces 3.3 与 JSF 2.1 一起使用。在下面的代码中,我有一个 primeFaces 数据表,其中包含从数据库中提取的数据行,这些数据是从页面左侧的树组件正确激活的。 dataTable 显示和行为正确。我有一个调用“更新”的删除功能,它刷新我的数据表并在数据库更新后反映我的更改。我的问题是 f:facet (id="header")。该方面包含一个 commandLink,它在我的数据表中创建一个新行。它的工作原理是我的数据库已正确更新。在此之后不会刷新数据表。为了刷新我的dataTable,我必须单击我的树组件中的另一个节点(在页面的左侧),然后返回原始treeNode 才能看到我的dataTable 完美更新。我可以在代码中添加什么来动态更新数据表? 不幸的是,我无法添加我在这里尝试过的所有排列 - 我在这个问题上花了很长时间 - 您的输入将不胜感激!

    <h:form id="formRight" >            
    <p:dataTable var="material" value="#{entityCrudTreeBean.materialList}" id="materials" editable="true" paginator="true" rows="10" sortBy="#{material.name}">
                <p:ajax event="rowEdit" listener="#{entityCrudTreeBean.onEditRow}"/>
                <f:facet id="header" name="header">
                    In-Cell Material Editing
                    <br />
                    <p:commandLink id="create" value="Add new material" action="#{entityCrudTreeBean.createNewMaterial}" update=":formRight"/>
                </f:facet>
                <p:column headerText="Name" style="width:125px">
                    <p:cellEditor>
                        ...
                    </p:cellEditor>
                </p:column>

                <p:column headerText="Options" style="width:10px" >
                    <p:rowEditor />
                    <p:commandLink id="delete" action="#{entityCrudTreeBean.deleteRow(material)}" update=":formRight">
                        <h:graphicImage value="#{resource['icons:Delete-icon.png']}" />
                    </p:commandLink>
                </p:column>
            </p:dataTable>
    </h:form>

编辑: 将行更改为 &lt;p:commandLink id="create" value="Add new material" action="#{entityCrudTreeBean.createNewMaterial}" update=":formRight:materials"/&gt; 也不起作用 编辑: 更改为: <f:facet id="header" name="header"> In-Cell Material Editing <br /> <p:commandLink id="create" value="Add new material" ajax="true" process="@this" action="#{entityCrudTreeBean.createNewMaterial}" update="@form"/> </f:facet> 也解决不了问题。

【问题讨论】:

  • 尚未阅读整个问题(只是主题)...尝试将update=":formRight" 替换为update="@form"
  • 谢谢,丹尼尔。不幸的是,code: &lt;p:commandLink id="create" value="Add new material" action="#{entityCrudTreeBean.createNewMaterial}" update="@form"/&gt; 也不起作用
  • &lt;h:form id="formRight" &gt; 是否有可能被其他形式包裹?
  • 不,它是&lt;ui:define name="centreContent"&gt; 的一部分。并且 id="delete" 运行良好。
  • 只是想知道,尝试将删除链接放在单独的列中,也许在&lt;p:rowEditor /&gt; 列中添加其他按钮存在一些问题

标签: jsf-2 primefaces


【解决方案1】:

不久前我遇到了和你类似的问题。

我的工作代码如下:

<f:facet name="header">Product List
<p:commandLink id="create" value="Add new product" ajax="true" process="@this" 
action="#{modelBean.save}" update="@form"/>
</f:facet>

【讨论】:

  • 嗨,斯蒂芬,感谢您分享您的代码!我已经将代码修改为&lt;f:facet id="header" name="header"&gt; In-Cell Material Editing &lt;br /&gt; &lt;p:commandLink id="create" value="Add new material" ajax="true" process="@this" action="#{entityCrudTreeBean.createNewMaterial}" update="@form"/&gt; &lt;/f:facet&gt;,但是组件不刷新的问题依然存在。
  • 也许我在这里很傻。我认为问题可能出在其他地方,不一定在您的 xhtml 中。你能发布 entityCrudTreeBean 和整个 xhtml 页面吗?
【解决方案2】:

斯蒂芬,你走在正确的轨道上! 它以一种更简单的方式解决了:我在托管 bean 中更新了我的 dataTable 列表——我为删除而不是插入。那里有大规模的监督。 此代码有效: &lt;p:commandLink id="create" value="Add new material" action="#{entityCrudTreeBean.createNewMaterial}" update=":formRight"/&gt; 给我之后的人的提示:Primefaces 3.3 有一个关于在数据表中更新的已知问题。您需要用另一个组件(如表单布局)包装 dataTable。在包装器上调用更新有效。 根据 8 月 15 日的 primefaces 博客,这已在 3.4.RC1 中修复。但是他们改变了树组件。我会等 3.4 最终版本再升级。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2017-01-25
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多