如何检索和显示列表框中的值列表以及与textarea中列表项对应的文本

时间:2012-06-24 23:09:18

标签: jsf primefaces

我需要使用一个列表框来显示数据库中的一些值,并在选择列表中的单个值时进行进一步处理。

在PrimeFaces展示网站上,该示例将固定(静态)数据加载到列表框中,每个列表项都有一个PrimeFaces命令。当我可能事先不知道项目数时,如何动态显示列表框中的项目?

我还需要在textarea中显示与列表中所选项目相对应的一些文本。我是否必须为此目的使用事件监听器?我想在开头留空文本区域。只有在列表框中选择了一个值时,我才想使用bean来检索和存储使用该textarea的数据。这可能吗?我该如何实现呢?

2 个答案:

答案 0 :(得分:3)

  

当我可能事先不知道项目数量时,如何动态显示列表框中的项目?

使用绑定到List<T>属性的<f:selectItems>。基本示例,假设您使用EJB / JPA与DB交互:

private Item selectedItem; // +getter+setter
private List<Item> availableItems; // +getter

@EJB
private ItemService service;

@PostConstruct
public void init() {
    availableItems = service.list();
}

<p:selectOneListbox value="#{bean.selectedItem}" converter="itemConverter">
    <f:selectItems value="#{bean.availableItems}" var="item"
        itemValue="#{item}" itemLabel="#{item.someLabel}" />
</p:selectOneListbox>    

itemConverter应该实现javax.faces.convert.Converter并在Item中将getAsString()对象转换为其唯一的字符串表示形式(通常是其数据库标识符),然后转换为getAsObject() {1}}。


  

我还需要在textarea中显示与列表中所选项目相对应的文本。我是否必须为此目的使用事件监听器?

只需将<p:ajax>(PrimeFaces相当于标准JSF <f:ajax>)放入更新textarea的列表框中。 E.g。

<p:selectOneListbox value="#{bean.selectedItem}" converter="itemConverter">
    <f:selectItems value="#{bean.availableItems}" var="item"
        itemValue="#{item}" itemLabel="#{item.someLabel}" />
    <p:ajax update="textarea" />
</p:selectOneListbox>    
<p:inputTextarea id="textarea" value="#{bean.selectedItem.someText}" />

选择项目时会调用它。

另见:

答案 1 :(得分:1)

是的,出于演示目的,大多数示例都加载了静态数据。但是如果你看一下PF展示的相同例子,第二个列表框代码如下:

<h:outputText value="Scrollbar: " />
    <p:selectOneListbox id="scroll" value="#{autoCompleteBean.selectedPlayer1}"
        converter="player" style="height:100px">
        <f:selectItems value="#{autoCompleteBean.players}"
            var="player" itemLabel="#{player.name}" itemValue="#{player}" />
    </p:selectOneListbox>

和f:selectItems value属性可以指向集合,数组,映射或SelectItem实例。因此,在上面的示例中,播放器可以是使用托管bean中的数据库填充的任何列表。

但是如果实例不是SelectItem,则通过在每个对象上调用toString来获取标签,最后将所选的itemValue设置为selectedPlayer1属性,但是您还可以看到之间存在转换器,因此传入的itemValue string被转换回播放器对象,然后设置为selectedPlayer1。

如果要在文本区域中显示所选项目,可以执行以下操作:

 <h:outputText value="Scrollbar: " />
    <p:selectOneListbox id="scroll" value="#{autoCompleteBean.selectedPlayer1}"
        converter="player" style="height:100px">
        <f:selectItems value="#{autoCompleteBean.players}"
            var="player" itemLabel="#{player.name}" itemValue="#{player}" />
            <p:ajax update="displayArea"/>
    </p:selectOneListbox>

 <p:inputTextarea id="displayArea" value="#{autoCompleteBean.selectedPlayer1}" />

这里使用ajax更新inputTextarea,其中包含用户选择的值。