【问题标题】:Updating ui:defined form content from Master template (JSF & Primefaces)从主模板(JSF 和 Primefaces)更新 ui:defined 表单内容
【发布时间】:2012-02-13 15:32:46
【问题描述】:

我的网络应用程序有点问题,基本上我一直收到一条警告消息:

信息:在视图中找不到标识符为“formName”的组件。

我知道为什么会发生这种情况,但我只需要确定它们是否是修复/更好的解决方案。

基本上我有一个包含许多<p:dialog> 组件的主模板文件,这些组件具有各种CRUD 功能。当用户与这些组件交互时,我使用内置的 primefaces 'update' 功能来以ajax方式更新<ui:defined>页面中的各种表单/组件。但是,由于 JSF web 应用程序的布局(即主模板和 ui:defined 网页)以及我在主模板文件中定义了这些组件的事实,这意味着可更新的表单/组件不一定在当前视图中并抛出上面的警告消息。

例如:

如果我有我的主模板文件:master.xhtml,其中包含一个名为 p:dialog id="componentA" /> 的组件。然后我有一个带有<h:form id=page1Form/> 的page1.xhtml,同样我有一个带有<h:form id=page2Form/> 的page2.xhtml,它们都包含由会话范围的支持bean 提供的信息,如果如果使用 componentA 发生 CRUD 操作?目前我只是使用 p:dialog id="componentA" update="page1Form, page2Form" /> 但因为只有 page1 或 page2 在视图中,Tomcat 会吐出上述消息。那么是否可以根据我所在的页面动态指定要更新的表单/组件,或者我是否必须在每个 <ui:define> 页面上指定 componentA(这将是大量重复的 html/代码并且不是特别易于管理)或是否有更新当前视图中所有表单/组件的方法?或者我所做的是否正确,我应该在 web.xml 中关闭开发模式以停止消息?

干杯

盟友

【问题讨论】:

  • 你能拉起 h:form 把它放在 ui:insert 周围吗?这样,表单将成为您页面的静态部分,并且始终存在。
  • 我想我可以使用 ui:param 标签来动态设置表单/组件以根据您所在的页面进行更新。
  • 如果它适合你的结构听起来不错。

标签: jsf primefaces


【解决方案1】:

只是为了确认一下,如果有人偶然发现了这个线程。我设法通过使用<ui:param name="paramName" value:"a value"/> 值解决了我的上述问题。

基本上在你的主模板文件中指定你的组件,就像你想要的那样

<p:commandButton value="Submit" action="#{someBean.doSomeStuff()}"
update="#{paramName}" />

然后在您的&lt;ui:composition&gt; 页面中,您只需声明参数名称及其值:

<ui:param name="paramName" value="someForm someOtherForm"/>

工作很好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2015-02-02
    • 2014-03-09
    • 2018-06-15
    相关资源
    最近更新 更多