为什么我必须在JSF中按两次按钮

时间:2013-01-18 15:17:41

标签: ajax jsf primefaces

我有两个页面,都有一个转发到另一个页面的按钮。 当我加载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通常都可以。

有什么想法吗?

0 个答案:

没有答案