0

@ViewScopedwithのバグに遭遇したと思いますa4j:commandButton

データをアップロードする必要があるものを除いて、すべてのアクションが 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>

a4jBtn問題を表示するには、 をクリックしてから をクリックしますcmdButton。パラメータがまだそこにあることがわかります。しかし、検証は失敗します。

<t:saveState>役に立た <rich:message>ず、良くもありませんが、

<h:commandButton value="ajaxBtn" ><f:ajax execute="@this" render="@form" /></h:commandButton>

それ以外の

<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ますが、より良いアイデアがあるか、何が問題なのかを説明していただけますか?

4

1 に答える 1

1

基本的に、同期ポストバックでビュー パラメーターを保持する必要があります。OmniFaces を使用しているので、<o:form>そのために使用できます。

<o:form includeViewParams="true">

または、すでにビュー スコープの Bean を使用しているため、非ポストバックでのみ検証をトリガーします。

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

または、OmniFaces を使用しているので、<o:viewParam>ポストバックの検証/変換/更新をスキップする代わりに使用できます。

<o:viewParam ... />
于 2013-01-08T14:39:55.800 に答える