2011-08-07 3 views
1

Richfaces 제안 상자를 사용하려고합니다. suggestionbox에서 선택한 값을 기반으로, 옆에 outputtext 값을 변경하려고합니다.Richfaces와 함께 ValueChangeListener 사용 제안 상자

여기 내 XHTML 코드 :

<td align="left"> 
    <h:inputText onchange="submit();" immediate="true" id="productname" valueChangeListener="#{salesBean.updateProductRate}" autocomplete="false"/> 
</td> 
<td align="left"> 
    <h:outputText id="rate" binding="#{salesBean.productRate}"/> 
</td> 

<rich:suggestionbox width="290" suggestionAction="#{salesBean.suggest}" var="state" for="productname">  
    <f:facet name="nothingLabel"> 
     <h:outputText value="No Products found" /> 
    </f:facet>  
    <f:facet name="header"> 
     <h:outputText value="Select Product" /> 
    </f:facet> 
    <h:column> 
     <h:outputText value="#{state.name}"/> 
    </h:column> 
</rich:suggestionbox> 

I '는이'(예를 들어)에 InputText]를에 Richfaces의 suggestionbox '는'문자로 시작하는 이름의 목록을 보여줍니다 입력

. 이름 중 하나 (예 : 'asd')를 선택하면 이전에 입력 한 'a'만 양식에 제출됩니다.

'asd'라는 전체 이름을 양식으로 제출하는 방법은 무엇입니까? 사전에

감사를 도와주세요 것은이 내 자바 코드

업데이트 코드

<td align="left"> 
           <h:inputText immediate="true" id="productname" autocomplete="false"> 

           </h:inputText> 

          </td> 
          <td align="left"> 
           <h:outputText id="rate" binding="#{salesBean.productRate}"/> 
          </td> 

<rich:suggestionbox width="290" 
suggestionAction="#{salesBean.suggest}" var="state" for="productname"> 

<f:facet name="nothingLabel"> 
      <h:outputText value="No Products found" /> 
      </f:facet> 

      <f:facet name="header"> 
      <h:outputText value="Select Product" /> 
      </f:facet> 
<h:column> 
    <h:outputText value="#{state.name}"/> 
</h:column> 
<a4j:support event="onselect" action="#{salesBean.updateProductRate}" reRender="rate"> 
      <f:setPropertyActionListener value="#{state.name}" target="#{salesBean.selectedProductName}" /> 
</a4j:support> 

(내가 Richfaces 3.3.2와 함께 JSF 1.2을 사용하고 있습니다)입니다

HtmlOutputText productRate = new HtmlOutputText(); 

public String updateProductRate() 
    { 
    System.out.println("Successfully entered "); 
    SalesDAO dao = new SalesDAO(); 


    //getProductRate().setValue(dao.fetchRateForProductEntered(evt.getNewValue().toString())); 

    //selectedProductName = dao.fetchRateForProductEntered(evt.getNewValue().toString()); 

    return "success"; 
} 

public HtmlOutputText getProductRate() { 
    return productRate; 
} 


public void setProductRate(HtmlOutputText productRate) { 
    this.productRate = productRate; 
} 

public List<ProductSuggestOBJ> suggest(Object input) 
{ 
    SalesDAO dao = new SalesDAO(); 
    List<ProductSuggestOBJ> suggestionList = new ArrayList<ProductSuggestOBJ>(); 

    String userInput = (String)input; 

    if(!userInput.trim().equalsIgnoreCase("")) 
    { 
     suggestionList = dao.suggestProductFromDatabase(userInput); 
    } 

    return suggestionList; 
} 

private String selectedProductName; 




public String getSelectedProductName() { 
    return selectedProductName; 
} 


public void setSelectedProductName(String selectedProductName) { 
    this.selectedProductName = selectedProductName; 
} 

같은 오류가 남아 있습니다. Plz 도움.

답변

2

제안 상자에서 제품을 선택한 다음 #{salesBean.updateProductRate}으로 전화하여 선택한 제품의 제품 요율을 계산하는 것이 좋습니다.

직접 a4j:support를 사용하여 제안 상자에 onselect 이벤트를 부착하는 대신 제안 상자에 값을 제공하는 h:inputTextvalueChangeListener를 사용하여 작업을 수행 할 수 있습니다. salesBean에서

<h:inputText immediate="true" id="productname" /> 
<br/> 
<h:outputText id="rate" value="#{salesBean.productRate}"/> 
<rich:suggestionbox width="290" suggestionAction="#{salesBean.suggest}" var="state" for="productname">  
    <f:facet name="nothingLabel"> 
     <h:outputText value="No Products found" /> 
    </f:facet>  
    <f:facet name="header"> 
     <h:outputText value="Select Product" /> 
    </f:facet> 
    <h:column> 
     <h:outputText value="#{state.name}"/> 
    </h:column> 
    <a4j:support event="onselect" action="#{salesBean.updateProductRate}" reRender="rate"> 
       <f:setPropertyActionListener value="#{state.name}" target "#{salesBean.selectedProductName}" /> 
    </a4j:support> 
</rich:suggestionbox> 

selectedProductName 속성과 그것의 getter와 setter를 추가합니다. updateProductRate()에서 selectedProductName을 사용하여 제품 요율을 계산하고 결과를 productRate

+0

에 보내 주시면 감사하겠습니다. 지연 돼서 죄송합니다. 문제는 아직 해결되지 않았습니다. Plz 내 업데이트 된 코드를 확인하십시오. – mvg

+0

제안 목록에서 값을 선택한 후'setSelectedProductName()'및'updateProductRate()'메서드가 호출 되나요? BTW, 업데이트 된 코드에서 어떤 오류도 발견되지 않습니다. –

+0

이전 댓글에 대 한 죄송합니다. 나는 거의 혼란 스러웠다. 귀하의 업데이트는 완벽하게 작동합니다. 감사! – mvg