我正在创建一个JSF应用程序。事实上,我制作了一个下拉列表,并希望根据从下拉列表中选择的值显示结果。如果有人可以帮助....谢谢
这是我的下拉
<h:form>
<h:commandButton action="sample?faces-redirect=true" value="submit">
<h:selectOneMenu id="sampleSearch" value="#{cBean.id}">
<f:selectItem id="id" itemLable="idText" itemValue="By Text" />
<f:selectItem id="idnumeric" itemLable="idNumeric" itemValue="Number" />
<f:selectItem id="product" itemLable="Product" itemValue="Main Product" />
<f:selectItem id="lonumber" itemLable="loNumber" itemValue="LoNumber" />
<f:selectItem id="formula" itemLable="formula" itemValue="By Formula" />
</h:selectOneMenu>
</h:commandButton>
</h:form>
答案 0 :(得分:1)
我建议你阅读一本关于JSF的书或者至少有一些关于它的教程。你的代码没有多大意义。您将selectOneMenu
嵌套在commandButton
内。如果要显示数据库中的某些值,还应调用托管bean中的方法来执行查询并检索结果。
你应该这样做:
<h:form>
<h:selectOneMenu id="sampleSearch" value="#{cBean.id}">
<f:selectItem id="id" itemLable="idText" itemValue="By Text" />
<f:selectItem id="idnumeric" itemLable="idNumeric" itemValue="Number" />
<f:selectItem id="product" itemLable="Product" itemValue="Main Product" />
<f:selectItem id="lonumber" itemLable="loNumber" itemValue="LoNumber" />
<f:selectItem id="formula" itemLable="formula" itemValue="By Formula" />
</h:selectOneMenu>
<h:commandButton action="#{cBean.search}" value="submit" />
</h:form>
你的bean看起来像这样:
public class CBean {
private String id; // getter+setter
public String search() {
// perform your query based on the id value
return "sample?faces-redirect=true";
}
}
答案 1 :(得分:1)
首先,您不能在<h:selectOneMenu>
内嵌套<h:commandButton>
个组件!
这是<h:form>
<h:form>
<h:commandButton action="sample?faces-redirect=true" value="submit" />
<h:selectOneMenu id="sampleSearch" value="#{cBean.id}">
<f:selectItem id="id" itemLable="idText" itemValue="By Text" />
<f:selectItem id="idnumeric" itemLable="idNumeric" itemValue="Number" />
<f:selectItem id="product" itemLable="Product" itemValue="Main Product" />
<f:selectItem id="lonumber" itemLable="loNumber" itemValue="LoNumber" />
<f:selectItem id="formula" itemLable="formula" itemValue="By Formula" />
</h:selectOneMenu>
</h:form>
然后,为了从数据库中获取下拉列表选项,您可以考虑使用<f:selectItems>
组件(并删除那些<f:selectItem>
)并传递List<T>
托管bean到组件value
属性。
selectOneMenu
将如下所示:
<h:selectOneMenu value="#{cBean.id}">
<f:selectItems value="#{cBean.values}"
var="item"
itemLabel="#{item.label}"
itemValue="#{item.value}"/>
</h:selectOneMenu>
对于托管bean,它现在应该提供一个public List<T> getValues()
方法,它将返回一个列表,其中包含将填充下拉列表的对象。
当T
是一个复杂的Java对象,例如Item
,其String属性为label
和value
时,您可以使用var
属性来获取迭代变量,而后者又可以在itemValue
和/或itemLabel
属性中使用(如果省略itemLabel
,则标签与值相同)
让我们说:
@ManagedBean
@RequestScoped
public class CBean {
public List<Item> getValues() {
List<Item> result = new ArrayList<Item>();
//..call-back to web-service, db, etc. and populate the result variable.
return result;
}
}
Item
类看起来像这样:
public class Item {
private String label;
private String value;
//getters, setters.
}
您可以在这里阅读更多内容: