【问题标题】:Dirty Checks: JSF + Primefaces application?脏检查:JSF + Primefaces 应用程序?
【发布时间】:2012-06-08 15:06:28
【问题描述】:

我有一个 Web 应用程序,我在其中使用 JSF + Primefaces 作为 UI。在处理 AJAX 调用(如对数据表的 rowSelect 事件进行 AJAX 调用)时,我在对网页应用脏检查时遇到了困难。

以下是我想通过 AJAX 调用应用脏检查的确切场景。以下是我在网页中使用的组件。

1) 我有一个由名为“companyBean”的 bean 填充的数据表(具有公司属性)

<p:dataTable id="basic" var="company" value="#{companyInfoBean.companyList}" 
    rowKey="#{company.id}"
    selection="#{companyInfoBean.selectedCompany}" selectionMode="single">

    <p:ajax event="rowSelect" update=":customerDataForm:customerDataFields" />

    <p:column id="modelHeader">
        <f:facet name="header">
            <h:outputText value="Company Name" />
        </f:facet>
        <h:outputText value="#{company.companyName}" />
    </p:column>
      more columns....
</p:dataTable>

如上选择的行 (AJAX 调用)我更新页面底部表单中的值

<h:form id="customerDataForm">
<p:panel id="customerDataFields">
<p:panelGrid >
<p:row>
    <p:column>
        <h:outputLabel for="companyname" value="Company Name " />
    </p:column>
    <p:column>
        <p:inputText id="companyname" value="#{companyInfoBean.selectedCompany.companyName}" label="Company Name" />
    </p:column>
         more columns...
  <p:row>
    <p:column colspan="2" style="text-align:right">
        <p:commandButton value="Save" actionListener="#{companyInfoBean.updateCompany}" 
        update=":customerDataForm:customerDataTable"/>
    </p:column>
    <p:column colspan="2" style="text-align:left">
        <p:commandButton value="Undo" />
    </p:column>
</p:row>

在上面的表格中,用户可以编辑在数据表上的 rowSelect 上更新的值。

现在我想对数据表上 rowSelection 的表单进行脏检查,即,尽管执行了 rowSelect 的 AJAX 调用,但是否提示用户使用的表单上有一些未保存的更改。

基本上我可以从这个场景中理解.. 我需要一些基于条件的 AJAX 调用,而不是简单的。或者我必须使用一些 jQuery 的东西来实现脏检查。

【问题讨论】:

    标签: java jsf jakarta-ee jsf-2 primefaces


    【解决方案1】:

    您可以通过不同的方式来实现这一点。这里有一些(如果弹出窗口没问题,我更喜欢方法 3):

    方法一:

    a) 使用 selectedCompany 的副本,例如 editCompanyBean 作为支持 customerDataFields 的 bean。
    b) 向 ajax 事件添加“监听器” 这可以在设置之前检查 editCompanyBean 的空值 这与 selectedCompany 的值。如果这失败了,你可以咆哮 消息并阻止副本。 注意:您可以使用覆盖开关来覆盖 (b)
    c) 在保存 editCompanyBean 时将其初始化为 null 字段的值。

    方法二:

    a) 在 selectedCompany 的 set 语句中,检查 bean 是否已经填充了一个值。如果已填充并跳过编辑,则抛出警告消息。
    b) 让用户在继续之前单击 customerDataFields 上的保存或重置。
    注意:每次保存或重置 customerDataFields 后清除 selectedCompany

    方法三:

    a) 将 customerDataFields 放入模态弹出对话框中。进行设置,以便用户在继续之前必须保存或重置。
    b) ajax 事件会弹出上面的模态对话框。您也可以使用按钮弹出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 2013-09-23
      • 2013-01-19
      相关资源
      最近更新 更多