1 从选项中选择值(菜单,列表,单选按钮)
<h:selectOneMenu value="#{bean1.propertyForSelection}"> <f:selectItems value="#{bean2.propertyForOptions}"/> </h:selectOneMenu>
1.1 输入类型的选择:
- h:selectOneMenu
- h:selectOneListbox(注意box的b为小写)
- h:selectOneRadio:如果使用<h:selectOneRadio … layout=”pageDirection”>,则单选按钮垂直排列;如果使用layout=”lineDirection,或者省略,则水平排列
1.2 更多的细节
<h:selectOneMenu value="#{bean1.selection}"> <f:selectItems value="#{bean2.options}"/> </h:selectOneMenu>
- beans:options和selection不一定要来自于同一个bean
- Options:可以是array、List类型(显示和返回的值相同)的值,也可以是Map(keys是显示值)
1Map keys are the values displayed. One selection, the corresponding Map value is returned. You usually use LinkedHashMap to preserve ordering. You can also have the Map values be complex objects, but then you need a converter.
,或者一组bean(使用itemLabel 和itemVar)
Options中的对象
var:选项中的每个 bean 将依次绑定到此名称
itemLabel:要显示在选项列表中的 bean 的一部分
itemValue:用户选择时返回的 bean 的一部分
<h:selectOneListbox value="#{bean1.selection}"> <f:selectItems value="#{bean2.options}" var="bn" itemLabel="#{bn.property1}" itemValue="#{bn.property2}"/> </h:selectOneListbox>
- f: namespace:必须在页面上方声明<html … xmlns:f=”http://xmlns.jcp.org/jsf/core” …>
2 Application Scope
2.1 Request Scope
2.2 Application Scope
#{messages.message1}:第一次访问此页 (或任何具有该 bean 名称的页) 时, 将对消息进行实例化。从那时起, 相同的 bean 实例用于所有用户和使用该 bean 名称的所有页。
2.3 Session Scope
第一次使用 bean 名称的任何页被特定用户访问时, 将对其进行实例化。从那时起, 如果它是相同的 bean 名称和相同的用户, 则使用相同的 bean 实例, 即使它是不同的页面。不同的用户会得到不同的实例
3 Menus, Listboxes等等使用Application Scope
<h:selectOneMenu value="#{bean1.propertyForSelection}"> <f:selectItems value="#{bean1.propertyForOptions}"/> </h:selectOneMenu>
<h:selectOneMenu value="#{bean1(User data bean (not application scoped)).propertyForSelection}"> <f:selectItems value="#{bean2(application scoped).propertyForOptions}"/> </h:selectOneMenu>