我有两个页面,都有一个转发到另一个页面的按钮。 当我加载test_A并按下按钮时,会加载test_B。但是从这一点来说,我总是要按两次按钮才能进入另一页。为什么?以及如何解决这个问题?
这是Glassfish中使用JSF和PrimeFaces的一个非常简单的场景:
test_A.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:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>TITLE</title>
</h:head>
<h:body>
<h:form>
<p:commandButton value="GO TO B" action="test_B" ajax="true"/>
</h:form>
</h:body>
</html>
test_B.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:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>TITLE</title>
</h:head>
<h:body>
<h:form>
<p:commandButton value="BACK TO A" action="test_A" ajax="true"/>
</h:form>
</h:body>
</html>
这里有很多关于JSF 2.0 790问题和“按钮两次”问题的页面,但它们都没有解决这个问题。这是一个非常简单的场景。例如,没有其他表单可以在ajax请求等中呈现此表单或其父组件。
将ajax设置为false不是解决方案,原因如下: - 我不想在地址栏中显示新文件名 - 我不希望用户能够使用后退按钮返回
使用带有outcome =“...”而不是action =“...”的p:按钮也不是解决方案,因为稍后我想在操作中使用辅助bean函数。
另一件奇怪的事情是,这种行为总是发生在Firefox上,但是Chrome通常都可以。
有什么想法吗?