0

バグかどうかわからない、奇妙な問題に遭遇しました。基本的に、現在の更新がajax経由で次の場合、フォーカスは次をスキップします。

問題を再現するには、以下の Bean を使用できます。

public class TestBean implements Serializable {
   private BigDecimal a;
   private BigDecimal b;
   private BigDecimal c;
   //
   public TestBean() {
   }
   public BigDecimal getA() {
      return a;
   }
   public void setA(BigDecimal a) {
      this.a = a;
   }
   public BigDecimal getB() {
      return b;
   }
   public void setB(BigDecimal b) {
      this.b = b;
   }
   public BigDecimal getC() {
      return c;
   }
   public void setC(BigDecimal c) {
      this.c = c;
      this.calculate();
   }
   public void calculate() {
      if (a != null && b != null)
      c = a.multiply(b);
   }
}

そして以下のxhtml

 <p:inputText id="a" value="#{testBean.a}" style="text-align:right">
    <p:ajax event="blur" listener="#{testBean.calculate}" update="c d"/>
 </p:inputText>
 <p:inputText id="b" value="#{testBean.b}" style="text-align:right">
    <p:ajax event="blur" listener="#{testBean.calculate}" update="c d"/>
 </p:inputText>
 <p:inputText id="c" value="#{testBean.c}" style="text-align:right">
 </p:inputText>
 <p:inputText id="d" value="#{testBean.c}"/>
  1. まず、フィールド id="a" をクリックして、id="a" にフォーカスを移し、何らかの値を入力します。ここでは問題ありません。
  2. 次に、Tab キーを押してカーソルを次のフィールド id = "b" に移動し、値を入力します。ここでは問題ありません。
  3. 次に、カーソルが次のフィールド id = "c" に移動することを期待して、もう一度 Tab キーを押します。しかし、それは起こりません。フィールド id="c" の値のみが更新され、どこかでフォーカスが失われます。フォーカスが失われている間にもう一度 Tab キーを押すと、フォーカスは id = "a" (または最初のフィールド) に移動します。
  4. Tab キーを使用せずにマウス クリックを使用しても、フィールド id = "b" で id="c" をクリックすると、フォーカスも失われます。
  5. フィールド id="b" update から "c" を削除して update="d" にすると、フォーカスはフィールド id="c" に残りますが、問題は、それが更新されないことです。 「c」の計算値。

結論として、現在のフィールドが ajax イベントを実行して update="nextfield" を介して次のフィールドを更新する場合、次のフィールドはタブキーまたは次にクリックされたマウスでフォーカスできないと言えると思います。マウスを 2 回クリックすると、フォーカスが次のフィールドに移動しますが、これは面倒です。ただし、すぐ次のフィールドの後のすべてのフィールドを更新しても、すぐ次のフィールドにフォーカスを正しく置くことができます。

これは本来あるべき姿ですか?この場合、実際に次のフィールドにフォーカスを移すにはどうすればよいでしょうか?

(PrimeFaces 3.2)

4

1 に答える 1

0

update発生すると、 と の HTML が更新されるためcdこれらの要素にカーソルを合わせることができません。イベント後の JavaScript を使用してフォーカスを設定するか、単にこの動作を受け入れるかは不明です。

于 2012-08-06T03:50:57.697 に答える