2014-09-21 46 views
1

我有要求在页面加载时禁用页面中的保存和取消按钮。如果用户更改页面中的某些内容,我应该启用保存和取消按钮。要做到这一点,我使用
http://plugins.jquery.com/are-you-sure/如何在主表面中添加新行以检测表单中的更改

此插件工作正常,但有需要定制在许多情况下,一个像下面

我有一个像它由三个小组的项目组的页面。

LeftPanel:系统项目组列表
CenterPanel:分配给选定的项目组
RightPanel的项目列表:项目清单分配到一个项目组

现在假设我有一个DataTable

<p:dataTable var="itms" value="#{myBean.listOfItems}" rows="10" 
    paginator="true" 
    paginatorTemplate="{CurrentPageReport} 
         {FirstPageLink} 
         {PreviousPageLink} 
         {PageLinks} 
         {NextPageLink} 
         {LastPageLink} 
         {RowsPerPageDropdown}" 
    rowsPerPageTemplate="10,50,100"> 
</p:dataTable> 

要指定项目的项目组将在右侧面板中选择项目并点击分配按钮,将添加到LISTOFITEMS在中心面板显示

listOfItems.addAll(selectedItems); 

我调用插件中定义的重新扫描方法分配按钮oncomplete来检测更改并跟踪添加的新记录,因为我想考虑添加或删除字段也是一个改变。

现在在页面加载时,如果选择了一个项目组,并且它已分配了13个项目,则可以看到包含10条记录的第一页。如果添加了任何项目,那么它们将被添加到后端列表的列表中。由于我在第一页并且页面具有完整的行插件,因此无法在窗体中找到任何更改。

如何在此场景中找到更改。

回答

0

既然你说你要考虑字段的任何添加或删除也发生变化,以确保您的用户保存更改,一个办法做到这一点可能是这样的:

你可以有一个隐藏的输入:

<h:inputHidden id="hiddenInput" /> 

而在你的分配按钮oncomplete你提到你可以添加:

oncomplete="$('#hiddenInput').val('dirty').change();" 

这将添加“脏”字符串(例如)以隐藏的输入并且呼叫change()告诉插件有某些改变,并且该插件将该窗体标记为脏(改变)。

而在你节省按钮oncomplete,所有你需要做的就是明确指出价值并重新初始化插件重新开始:

oncomplete="$('#hiddenInput').val('');$('#formId').trigger('reinitialize.areYouSure');" 

而且这将是很好添加一些检查或在行动结束时这样做(link)。

注意:如果您添加和删除相同的'项目',在技术上没有变化,但你想保持表格变化的权利?该解决方案将为此工作。纠正我,如果我错了,你想管理这个特殊情况。您将不得不添加一些逻辑来比较新旧值,并相应地清除或肮脏隐藏的输入。

+0

感谢您的回答。如果我没有在右侧面板中选择任何内容并单击分配按钮,它仍然会启用保存按钮。有些验证会阻止将一些记录分配给中心面板。所以这个解决方案不适合我。我已经想出了一个办法来做到这一点。我正在探索使其成为通用的所以在这里张贴延迟。我感谢你的努力。再次感谢:) – 2014-10-01 07:02:14

+0

@Srikanth Ganji我还提到,在答案中,这将是很好的添加像[这个](http://stackoverflow.com/a/16796033/4056222)一些检查。但如果你愿意,我可以更具体。你可以检查那里的所有东西,客户端验证,如果你在动作之后通过了它们,你也可以检查callBackParams,或者你可以在你知道所有工作完成后,在你的行动结束时执行'oncomplete'中的内容。我不知道你个人的验证,所以我没有指定它们。无论如何,如果你有比这个hiddenInput更好的解决方案,我会读它:) – mrganser 2014-10-01 07:27:34

+0

我的想法是有一个输出文本,它始终保存列表大小的值,并在每个ajax操作系统上更新为最新的数据大小。我会推荐插件来监控这个值,以引发一个变化。它在所有情况下都能很好地工作。但它会让你对所有页面都有一个输出文本,认为这不是什么大问题。我有另一个想法,依靠currentfacesReportTemplate =“(Number of Records:{totalRecords})”属性的primefaces datatable.With这不需要有输出文本或输入隐藏 – 2014-10-01 07:58:05

相关问题