2013-10-22 4 views
1

내 문제에 관해서 SO와 다른 곳에서 읽었습니다.JSF ajax 호출을 잘못 사용했습니다.

나는 내가하고있는 일이 완전히 잘못되었다는 것을 알고있다. 내 문제는 어떻게 해야할지 모르겠다. , 누군가가 나를 도울 수 있다면 나는 그것을 좋아할 것이다.

현재 내가 무엇을은 다음과 같습니다

<ul class="unstyled"> 
    <ui:repeat value="#{paymentDetailsBean.products}" var="product" varStatus="status"> 
     <li> 
      <div> 
       <h:selectBooleanCheckbox value="#{product.initiallySelected}"> 
        <f:ajax render="paymentDetailsForm:totalPriceText" listener="#{paymentDetailsBean.updateTotalPrice}"></f:ajax> 
       </h:selectBooleanCheckbox> 
      </div> 
     </li> 
    </ui:repeat> 
</ul> 

product.initiallySelected은 사용자 검사/제품을 선택하거나 선택 취소합니다 때 업데이트 할 부울 값입니다.

나는이를 다시 쓰게 아약스 태그를 사용하고 있습니다 :

<h:outputText id="totalPriceText"><b>#{passengerDetailsBean.formatCurrency(paymentDetailsBean.totalPrice.toString())}</b></h:outputText> 

은 기본적으로 내가 총 금액이 업데이트 될 하다며 원하는, 선택하기 때문에/제품을 선택 해제하면 위로 또는 아래로 갈 것. 또한 아약스 태그를 사용하고 (그리고 문제가 분명히있다 곳이다) 백엔드에서이 함수를 호출하기 :

public void updateTotalPrice(AjaxBehaviorEvent event) 
{ 
    this.totalPrice = 0.0f; 

    for (Product product : this.getProducts()) 
    { 
     if (product.getInitiallySelected()) 
     { 
      this.totalPrice += product.getCurrencyAmountGroup().getAmount(); 
     } 
    } 

    this.totalPrice += this.getTotalFaresAmount(); 
} 

이 모든 작동을하지만, 매우 천천히, 그리고 나는 그것이 알고 난 때문에 ajax 태그를 사용하여 비즈니스 로직을 수행하면 안됩니다. 나는 그것을하는 정확한 방법을 모른다. 아무도 나를 도울 수 없습니까?

+0

귀하의 아약스 액션 것입니다 루프의 모든 제품도 U 단지 확인/선택 취소 한에와 증가 /이 체크 박스의 현재 선택한 제품과 현재의 값에 따라 감소 제품, 그게 왜 느린가. 'updateTotalPrice' 메소드를 수정하여 모든 제품이 아닌 선택된 제품을 계산할 수 있습니다. – ggDeGreat

+0

@ggDeGreat 제발 좀 더 자세히 설명해 주시겠습니까? 나는 정말로 이해하지 못한다. – Skytiger

답변

1

특정 제품을 선택/선택 취소하여 총 값을 늘리거나 줄이려는 경우 환경이 EL 2.2+를 지원한다고 가정하면 (현재 스 니펫으로 판단 할 때) 현재 값을 bean 특성으로 저장할 수 있습니다

<ui:repeat value="#{paymentDetailsBean.products}" var="product"> 
    <li> 
     <div> 
      <h:selectBooleanCheckbox> 
       <f:ajax render=":paymentDetailsForm:totalPriceText" 
         listener="#{paymentDetailsBean.updateTotalPrice(product, component.value)}" /> 
      </h:selectBooleanCheckbox> 
     </div> 
    </li> 
</ui:repeat> 
<h:outputText value="#{paymentDetailsBean.totalPrice}" /> 

청취자 :

public void updateTotalPrice(Product product, Boolean direction) { 
    totalPrice += product.getCurrencyAmountGroup().getAmount() * 
         (direction ? 1 : -1); 
} 
+0

지금 내 작품에 액세스 할 수는 없지만 아침에 제일 먼저 시도하고 결과를 알려줍니다. 감사! – Skytiger

관련 문제