Использование ValueChangeListener с предложением Richfaces Box - PullRequest
2 голосов
/ 07 августа 2011

Я пытаюсь использовать поле для предложений Richfaces. На основании значения, выбранного в окне предложения, я пытаюсь изменить значение выходного текста рядом с ним.

Вот мой код 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>

Когда я набираю 'a' во входном тексте (например), поле предложения Richfaces показывает список имен, начинающихся с буквы "a" Если я выберу одно из имен (скажем, «asd»), только «a», которое я набрал ранее, будет представлено в форме.

Как сделать, чтобы имя целиком передавалось в форме asd? Пожалуйста, помогите

Заранее спасибо

(я использую JSF 1.2 вместе с Richfaces 3.3.2)

Обновленный код

<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>

Это мой код Java

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;
}

Осталась та же ошибка. Пожалуйста, помогите.

1 Ответ

2 голосов
/ 08 августа 2011

Похоже, что вы хотите выбрать продукт из окна предложения, а затем вызвать #{salesBean.updateProductRate}, чтобы рассчитать стоимость продукта для выбранного продукта.

Вы можете сделать это, напрямую прикрепив событие onselect к ящику с предложением, используя a4j:support вместо использования valueChangeListener из h:inputText, значение которого в ящике с предложением указывает.

<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>

В salesBean добавьте свойства selectedProductName, а также его методы получения и установки. В updateProductRate() вы используете selectedProductName для расчета нормы продукта и присваиваете результат productRate

...