我正在尝试使用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帮助。
答案 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