Spring 使用JSF在PrimeFaces表单中保持从托管Bean到对话框的参数处于打开状态
我有一个问题,培训形式在素面。我将尝试以最好的方式解释: 功能思想是打开一个对话框,用户可以在其中看到前面介绍的某些输入 事实上,当对话框打开时,我需要使用(保存)视图中管理的bean中的一些属性 代码中的示例: 我的xhtml说: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}"/&
</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();");
}