2013-04-16 20 views
3

두 개의 입력이있는 양식이 있는데 한 값은 다른 값에 따라 다릅니다. 사용자가 하나의 필드를 변경할 때 값을 다시 계산해야하며 (이것은 setter 메서드에서 수행됩니다) 폼을 업데이트해야합니다.업데이트 후 포커스 손실

<h:form> 
<p:inputText id="price1" value="#{bean.price1}"}"> 
    <p:ajax event="blur" update="@this, price2"/> 
</p:inputText> 
<p:inputText id="price2" value="#{bean.price2}"> 
    <p:ajax event="blur" update="@this, price1"/> 
</p:inputText> 
</h:form> 

문제는 업데이트 초점 예를 들어, 손실 된 후이다 :

내 예입니다 Tab 키를 사용하여 price1에서 price2로 이동하는 경우.

답변

0
$("#price2").focusout(function(){ 
    $("#price1").focus(); 
}); 
5

이 작업을 시도 할 수 있습니다 :

<h:form id="fm"> 
    <script type="text/javascript"> 
     function test(){ 
      $(PrimeFaces.escapeClientId('fm:price2')).focus(); 
     } 
    </script> 
    <p:inputText id="price1" value="#{bean.price1}" > 
     <p:ajax event="blur" oncomplete="test();" update="@this, price2"    listener="#{bean.hand}"/> 
    </p:inputText> 
    <p:inputText widgetVar="xxx" id="price2" value="#{bean.price2}"> 
     <p:ajax event="blur" update="@this, price1"/> 
    </p:inputText> 
</h:form> 
0
  • 세트 widgetVar를 P에 대한 귀하의 의견
  • 을 위해 :. 아약스, 설정의 onComplete = "PF ('YOUR_WIDGET_VAR_NAME') jq.focus을 (); "
0

이것은 매우 귀찮은 문제입니다. 이는 JSF가 부분 렌더링을 수행하는 방식과 관련이 있습니다. 다시 렌더링되는 전체 요소를 대체하므로 포커스가 손실됩니다.

이 문제를 해결하는 유일한 방법은 포커스 유지 요소의 tabIndex를 저장하고 DOM을 업데이트 한 후에 다시 포커스를 설정하는 것입니다.

솔루션에 대한 자세한 내용은 JSF 2 AJAX focus issues 블로그 게시물을 참조하십시오.

+0

참조 대답 자체에 아주 좋은 요약을 작성하면 대답은 훌륭합니다. 이것이 가능하지 않은 경우 (예 : 요약이 매우 복잡해 질 경우) 명시하십시오. – Kukeltje

관련 문제