Spring 使用JSF在PrimeFaces表单中保持从托管Bean到对话框的参数处于打开状态

Spring 使用JSF在PrimeFaces表单中保持从托管Bean到对话框的参数处于打开状态,spring,jsf-2,primefaces,Spring,Jsf 2,Primefaces,我有一个问题,培训形式在素面。我将尝试以最好的方式解释: 功能思想是打开一个对话框,用户可以在其中看到前面介绍的某些输入 事实上,当对话框打开时,我需要使用(保存)视图中管理的bean中的一些属性 代码中的示例: 我的xhtml说: </h:form> <!-- Code Here --> <p:commandButton value="Preview" action="#{mockBean.showPreview}"/&

我有一个问题,培训形式在素面。我将尝试以最好的方式解释:

功能思想是打开一个对话框,用户可以在其中看到前面介绍的某些输入

事实上,当对话框打开时,我需要使用(保存)视图中管理的bean中的一些属性

代码中的示例:

我的xhtml说:

    </h:form>

        <!-- Code Here -->

        <p:commandButton value="Preview" action="#{mockBean.showPreview}"/>

        <!-- Code Here -->

        <p:dialog id="myDialog" 
                  widgetVar="myDialog" 
                  modal="true" 
                  appendToBody="true" 
                  resizable="false">
            <h:form>                        
                <p:panelGrid columns="2">

                    <!-- ...    Code Here -->   

                    <h:outputText value="Name" />
                    <h:outputText value="#{mockBean.name}" 
                                  style="display:block; 
                                  width:225px"/>    

                    <!-- ... Code Here -->

                </p:panelGrid>
            </h:form>
        </p:dialog>
    </h:form>

我的Bean说:(MockBean.java)


公共void showPreview(){
RequestContext=RequestContext.getCurrentInstance();
context.execute(“myDialog.show()”);
}
在视图中,无论是以前还是以后,当bean具有正确的值时,对话框中的mockBean.name属性都将为空

我怀疑解决方案会很简单,但我是这方面的新手,我只是介绍一下

对不起,如果这个问题有点荒谬或者类似的话


问候。

您必须更新对话框,以便它可以读取bean中保存的值

该对话框是静态的,在呈现页面时会被填充,除非您告诉他这样做,否则不会再次呈现

您可以使用命令按钮的
actionListener
来保存属性,并结合
onClick=“PF('myDialog').show()”
update=“myDialog”

大概是这样的:

<p:commandButton value="Save and Open Dialog" actionListener="#{mockBean.saveProperties()}" update="myDialog" onclick="PF('myDialog').show()"/>

如果您只想显示来自backingbean的一些消息,那么就不需要在
标记中使用另一个
标记。您的代码应该是这样的

<h:form>

        <!-- Code Here -->

        <p:commandButton value="Preview" action="#{mockBean.showPreview}" update="myDialog" />

        <!-- Code Here -->
    <p:dialog id="myDialog" 
          widgetVar="myDialog" 
          modal="true" 
          appendToBody="true" 
          resizable="false">

       <p:panelGrid columns="2">

            <!--  Code Here --> 

            <h:outputText value="Name" />
            <h:outputText value="#{mockBean.nombre}"  
                    width:225px"/>    

            <!-- ... Code Here -->

       </p:panelGrid>

    </p:dialog>

</h:form>

为什么要在一个
标记内使用另一个
标记?实际上没有任何意义。这是一个错误:DIt工作正常。对话。很明显,他没有上船。谢谢顺便说一下,@Pellizon,也许你可以回答我在解决第一个问题后出现的一个问题。问题是我如何能够打开对话框,而忽略我在表单(“名称”、“邮件”等)上设置的必填字段限制。该解决方案添加了“immediate=true”在按钮声明中,它不能正常工作,因为它似乎正确地禁用了上载,虽然跳过了验证,但对话框窗口不会显示引入的bean属性。问题是您想在打开对话框之前保存属性,因此在该保存操作中调用验证阶段,除非您设置了
immediate=true
(正如您所说,这不起作用)。我仍然想知道为什么它不起作用,但是让我尝试一些事情,我会得到一个更好的答案:)我理解。谢谢你的推荐。
 public void showPreview(){
    RequestContext context = RequestContext.getCurrentInstance(); 
    context.execute("myDialog.show()");
    context.update("myDialog");
}
<h:form>

        <!-- Code Here -->

        <p:commandButton value="Preview" action="#{mockBean.showPreview}" update="myDialog" />

        <!-- Code Here -->
    <p:dialog id="myDialog" 
          widgetVar="myDialog" 
          modal="true" 
          appendToBody="true" 
          resizable="false">

       <p:panelGrid columns="2">

            <!--  Code Here --> 

            <h:outputText value="Name" />
            <h:outputText value="#{mockBean.nombre}"  
                    width:225px"/>    

            <!-- ... Code Here -->

       </p:panelGrid>

    </p:dialog>

</h:form>
public void showPreview(){
    RequestContext context = RequestContext.getCurrentInstance(); 
    context.execute("PF('myDialog').show();");
}