将ValueChangeListener与Richfaces建议框一起使用

时间:2011-08-07 06:19:51

标签: jsf richfaces

我正在尝试使用Richfaces建议框。根据从建议框中选择的值,我试图更改它旁边的outputtext值。

这是我的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>

当我在inputtext中输入'a'时(例如)Richfaces suggestionbox显示以字母'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;
}

同样的错误仍然存​​在。 Plz帮助。

1 个答案:

答案 0 :(得分:2)

您似乎想从建议框中选择产品,然后调用#{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属性及其getter和setter。在updateProductRate()中,您使用selectedProductName计算产品费率并将结果分配给productRate