Jsf ViewParam和a4j:commandButton的验证

Jsf ViewParam和a4j:commandButton的验证,jsf,ajax4jsf,commandbutton,Jsf,Ajax4jsf,Commandbutton,我想我遇到了@ViewScoped与a4j:commandButton的一个bug 我有一个非常复杂的表单,其中所有操作都使用a4j,除了那些需要上传数据的操作。 根据命令的顺序,viewParam的验证将中断 以下是工作代码: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xh

我想我遇到了
@ViewScoped
a4j:commandButton
的一个bug

我有一个非常复杂的表单,其中所有操作都使用a4j,除了那些需要上传数据的操作。 根据命令的顺序,viewParam的验证将中断

以下是工作代码:

<?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://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:a4j="http://richfaces.org/a4j" >

  <f:metadata>
    <f:viewParam id="viewParam" name="viewParam" value="#{bean.viewParam}" required="true" />
  </f:metadata>
  <h:head>
    <title>Test View Param</title>
  </h:head>
  <h:body>
    <h:message for="viewParam" />
    <hr/>
    <h:form>
      #{bean.viewParam}<br/>
      <h:commandButton value="cmdButton" />
      <a4j:commandButton value="a4jBtn" execute="@this" render="@form" />
    </h:form>  
  </h:body>
</html>
而不是

<a4j:commandButton value="a4jBtn" execute="@this" render="@form" />

工作正常

在Tomcat 6.0.18和jboss el 2.0.0.GA上使用myFaces 2.0.15和richFaces 4.2.3.Final


我可以通过使用
f:ajax
而不是
a4j:commandButton
来解决我的问题,但也许您有更好的主意,或者您可以向我解释出哪里出了问题?

您基本上需要在同步回发上保留视图参数。当你使用OmniFaces时,你可以使用它

<o:form includeViewParams="true">

或者,由于您已经在使用视图范围的bean,因此仅在非回发上触发验证

<f:viewParam ... required="#{not facesContext.postback}" />
<o:viewParam ... />

或者,当您使用OmniFaces时,您可以使用跳过回发上的验证/转换/更新的OmniFaces

<f:viewParam ... required="#{not facesContext.postback}" />
<o:viewParam ... />


使用omnifaces和进行修复。非常感谢@BalusC。不客气。我已经看到了这个问题,并且已经知道
可以解决这个问题。我不知道我为什么懒得回答。也许是因为我不想再把“另一个图书馆”挤进我的喉咙:)如果你在以后的问题中提到你也在使用OmniFaces可能会有所帮助。@BalusC:好的,对。我将来一定会提到全方位。但是现在请写一个答案@巴卢斯克:我在
@ViewScoped
方面遇到了更多的问题,但现在只要使用
,一切都能正常工作,遗憾的是没有在核心中解决这一问题。顺便说一句,我开始使用OmniFaces的原因是,您可能想花点时间浏览一下showcase示例,了解OmniFaces都提供了什么:通常,它只是解决了JSF中的一些缺点。