从命令按钮调用另一个表单

问题描述 投票:0回答:3

当我提交表单时,它应该调用另一个表单,以便我可以渲染它。我使用 primefaces,我希望它能像下面这样工作。但它抛出一个错误。

xhtml

<h:form id="from1">
<h:inputText=......
<h:outputText=....
<p:commandButton id="submit" actionlistener="#{bean.method}" value="submit" process="form2"/>

<h:form id="form2">
<h:outoutText value="it is working" render="#{bean.boolean}" />
</h:form>

错误

[Faces Servlet]] (http--127.0.0.1-8080-2) Servlet.service() for servlet Faces Servlet threw exception: javax.faces.FacesException: Cannot find component with identifier "form2" referenced from "form1_submit".

已更新

<h:form id="from1">
    <h:inputText=......
    <h:outputText=....
    <p:commandButton id="submit" actionlistener="#{bean.method}" value="submit" update=":form1"/>
</h:form>
jsf jsf-2 primefaces
3个回答
16
投票

有两个错误:

  • 相对组件客户端 ID 与最近的父

    UINamingContainer
    组件相关(在您的情况下,因此是
    <h:form id="form1">
    )。客户端 ID“form2”不存在于“form1”上下文中的任何位置。您需要使用绝对客户端 ID,并以命名容器分隔符作为前缀,默认为
    :
    。这将从视图根开始搜索组件。

    process=":form2"
    
  • 您无法通过提交一份表格来处理另一份表格。您需要处理的所有字段根本没有提交(请注意,这不是 JSF 限制,而是 HTML 限制)。只需以与您需要提交的表单相同的形式附上您需要处理的字段即可。


7
投票

还有另一种解决方案,使用 p:remoteCommand 和带有 onclick 的 JS 描述 这里


0
投票

一光年远方,有未触及的思维路径

以便我可以渲染它。

并在您的表单中2

h:outputText
-注意:
outputText
不是您输入的内容
outoutText

render="#{bean.boolean}"

所以,我可以看到您只想根据布尔值渲染 form2#outputText

bean.boolean

尝试将

update=":form1"
 中的属性 
update=":form2"
 更改为 
form1#commandButton

© www.soinside.com 2019 - 2024. All rights reserved.