【发布时间】:2014-07-04 16:05:35
【问题描述】:
我正在尝试显示来自 bean 的对话框,如 PrimeFaces ShowCase 中所述。事情是一切都按预期工作并且对话框出现了,但是如果我关闭对话框然后再次按下按钮,除非刷新页面,否则对话框不会出现。
这不是示例中显示的行为,每次按下按钮时都会显示对话框。
我在代码中的唯一区别是我使用了 CDI 替代方案而不是托管 bean 包,因为 javax.faces.bean 包将被弃用。我的意思是:
-
javax.inject.Named而不是javax.faces.bean.ManagedBean -
javax.faces.view.ViewScoped而不是javax.faces.bean.ViewScoped
无论如何,我也尝试过使用托管 bean 包,但仍然出现同样的错误行为。
这是我目前所拥有的:
index.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>
ViewDialogMB.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);
}
}
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:outputLabel value="Hello from Dialog!" />
</h:body>
</html>
faces-config.xml(根据对话框框架文档)
<?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。
【问题讨论】:
-
在你的 commandButton 中禁用 ajax。
标签: jsf jsf-2 primefaces glassfish-4