Jsf 将ValueChangeListener与Richfaces建议框一起使用

Jsf 将ValueChangeListener与Richfaces建议框一起使用,jsf,richfaces,Jsf,Richfaces,我正在尝试使用Richfaces建议框。根据从suggestionbox中选择的值,我尝试更改它旁边的outputtext值 以下是我的xhtml代码: <td align="left"> <h:inputText onchange="submit();" immediate="true" id="productname" valueChangeListener="#{salesBean.updateProductRate}" autocomplete="false"/

我正在尝试使用Richfaces建议框。根据从suggestionbox中选择的值,我尝试更改它旁边的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”以表格形式提交?请帮忙

提前谢谢

(我正在使用JSF1.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;
}
HtmlOutputText productRate=新的HtmlOutputText();
公共字符串updateProductRate()
{
System.out.println(“已成功输入”);
SalesDAO=新的SalesDAO();
//getProductRate().setValue(dao.fetchRateForProductEntered(evt.getNewValue().toString());
//selectedProductName=dao.fetchRateForProductEntered(evt.getNewValue().toString());
返回“成功”;
}
公共HtmlOutputText getProductRate(){
收益率;
}
public void setProductRate(HtmlOutText productRate){
this.productRate=productRate;
}
公共列表建议(对象输入)
{
SalesDAO=新的SalesDAO();
List suggestionList=新建ArrayList();
字符串用户输入=(字符串)输入;
如果(!userInput.trim().equalsIgnoreCase(“”))
{
suggestionList=dao.SuggestionProductFromDatabase(用户输入);
}
返回建议列表;
}
私有字符串selectedProductName;
公共字符串getSelectedProductName(){
返回selectedProductName;
}
公共无效集合selectedProductName(字符串selectedProductName){
this.selectedProductName=selectedProductName;
}

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

您似乎想从建议框中选择一个产品,然后调用
{salesBean.updateProductRate}
来计算所选产品的产品价格

您可以通过使用
a4j:support
onselect
事件直接附加到建议框,而不是使用建议框提供值的
h:inputText
valueChangeListener

<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

,感谢您的回复。抱歉耽搁了。这个问题还没有解决。请检查我更新的代码。从建议列表中选择值后是否调用
setSelectedProductName()
updateProductRate()
方法?顺便说一句,我没有发现你的更新代码中有任何错误。很抱歉之前的评论。我有点困惑。你的更新工作得很好。谢谢