gpt4 book ai didi

jsf - 来自 bean 的 Primefaces 对话框只显示一次

转载 作者:行者123 更新时间:2023-12-04 13:52:59 25 4
gpt4 key购买 nike

我正在尝试显示一个来自 bean 的对话框,如本 PrimeFaces ShowCase 中所述.事情是一切都按预期工作并显示对话框,但是如果我关闭对话框然后再次按下按钮,除非刷新页面,否则对话框不会显示。

这不是示例中显示的行为,每次按下按钮时都会显示对话框。

我在代码中的唯一区别是我使用了 CDI 替代品而不是托管 bean 包,因为 javax.faces.bean包将被弃用。我的意思是:

  • javax.inject.Named而不是 javax.faces.bean.ManagedBean
  • javax.faces.view.ViewScoped而不是 javax.faces.bean.ViewScoped

  • 无论如何,我也尝试过使用托管 bean 包,但仍然存在相同的错误行为。

    这是我到目前为止:

    索引.xhtml
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <h:head>
    <title>Facelet Title</title>
    </h:head>
    <h:body>
    <h:form>
    <p:commandButton value="Open" actionListener="#{viewDialogMB.viewDialog()}"/>
    </h:form>
    </h:body>
    </html>

    View 对话框MB.java
    import java.util.HashMap;
    import java.util.Map;
    import javax.faces.view.ViewScoped;
    import javax.inject.Named;
    import org.primefaces.context.RequestContext;


    @Named(value = "viewDialogMB")
    @ViewScoped
    public class ViewDialogMB {

    public void viewDialog() {
    Map<String,Object> options = new HashMap<>();
    options.put("modal", true);
    options.put("resizable", true);

    RequestContext.getCurrentInstance().openDialog("dialog", options, null);
    }

    }

    对话框.xhtml
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <h:head>
    <title>Dialog Title</title>
    </h:head>
    <h:body>
    <p:outputLabel value="Hello from Dialog!" />
    </h:body>
    </html>

    faces-config.xml(根据 Dialog Framework 文档)
    <?xml version='1.0' encoding='UTF-8'?>
    <faces-config version="2.2"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
    <application>
    <action-listener>
    org.primefaces.application.DialogActionListener
    </action-listener>
    <navigation-handler>
    org.primefaces.application.DialogNavigationHandler
    </navigation-handler>
    <view-handler>
    org.primefaces.application.DialogViewHandler
    </view-handler>
    </application>
    </faces-config>

    顺便说一下,我的平台(如果有任何区别)是:
  • 玻璃鱼 4
  • JSF 2.2
  • JDK 1.7 - 64 位
  • Java EE 7
  • PrimeFaces 5.0(社区版)

  • 我尝试过 Mozilla Firefox、Google Chrome 和 MS IE11。

    最佳答案

    此处报告了此错误 Dialog Framework regression bug in PF 4.0.10 and higherIssue 6915: PF 5.0 error when closing DF window opened from DataTable

    作为变通解决方案,使用 taconic 的解决方案,即在主体内添加面板。

    您的 dialog.xhtml 看起来像这样:

    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <h:head>
    <title>Dialog Title</title>
    </h:head>
    <h:body>
    <p:panel>
    <p:outputLabel value="Hello from Dialog!" />
    </p:panel>
    </h:body>
    </html>

    关于jsf - 来自 bean 的 Primefaces 对话框只显示一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24577952/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com