【问题标题】:Getting selected value of a SelectOneMenu获取 SelectOneMenu 的选定值
【发布时间】:2013-01-27 06:21:56
【问题描述】:

我正在一个 jsf 页面上测试组件“SelectOneMenu”。我正在通过我的 ManageBean 动态填充这个组件(这将从数据库中获取所有动物)。

我想知道是否可以看到该“SelectOneMenu”(组合框)的用户选择项,我正在尝试使用 value="#{animalsManage.animalSelect}" 但它只在开头调用这页纸。另外,我正在使用 inputText 来查看“SelectOneMenu”的选定项的值。

我做错了什么?

JSF:

    <body>
    <ui:component>
        <h:form>
                    <h:outputText value="Select one Mets File" />
                    <h:selectOneMenu id="combo" value="#{animalsManage.animalSelected}">
                        <f:selectItem itemLabel="Select..."  noSelectionOption="true"/>
                        <f:selectItems value="#{animalsManage.allAnimals}" />
                    </h:selectOneMenu>
                    <h:inputText id="textbox" value="#{animalsManage.animalSelected }" />
        </h:form>
    </ui:component>
</body>

管理豆:

    @ManagedBean
    @ViewScoped
    public class AnimalsManage implements Serializable {

    @EJB
    private AnimalsFacadeREST animalsFacadeREST;
    private String animalSelected;
    private List< SelectItem> selectAnimals;

    public List<SelectItem> getAllAnimals() {
            List<Animals> al = animalsFacadeREST.findAll();
            selectAnimals = new ArrayList< SelectItem>();
            int i = 0;
            for (Animals animal: al) {
                selectAnimals.add(new SelectItem(i, animal.getName()));
                i++;
            }
            return selectAnimals;
    }

    public String getAnimalSelected() {
       return animalSelected;
    }

    public void setAnimalSelected(String animalSelected) {
        this.animalSelected = animalSelected;
    }
}

【问题讨论】:

  • 您可以在 中添加一个 f:ajax,事件为“change”,还可以提供一个值为“@form”的渲染属性。这可以在文本框中显示您选择的值。像这样的 。试一试。
  • 什么是#{fileManage.fileName}?顺便说一句,&lt;h:selectOneMenu&gt; 呈现下拉菜单,而不是组合框。让你的条款直截了当。最后但同样重要的是,在 getter 中执行业务逻辑是不好的。有关如何正确使用 &lt;h:selectOneMenu&gt; 的一些提示,请查看其 wiki 页面(将鼠标放在您放置在问题上的 [selectonemenu] 标签上,直到出现一个黑框,然后在其中单击 info 链接)。
  • 感谢 hemanth 帮助。另外,感谢 BalusC,我编辑了文本,希望现在可以了。

标签: jsf-2 managed-bean selectonemenu


【解决方案1】:

对于提出的问题有很多解决方案。我在这里提出两个基本想法。

  1. 服务器端解决方案。只需在 &lt;h:selectOneMenu&gt; 中附加 &lt;f:ajax&gt; 标签即可更新选定的值并重新呈现用户的选择,如

    <h:selectOneMenu id="combo" value="#{animalsManage.animalSelected}">
        <f:selectItem itemLabel="Select..."  noSelectionOption="true"/>
        <f:selectItems value="#{animalsManage.allAnimals}" />
        <f:ajax execute="combo" render="textbox" />
    </h:selectOneMenu>
    <h:inputText id="textbox" value="#{animalsManage.animalSelected }" />
    

    如果您愿意,您还可以通过指定&lt;f:ajax&gt; 标记的listener="#{animalsManage.performCustomAjaxLogic}" 来对ajax 侦听器中的选定元素执行一些自定义逻辑。

  2. 客户端解决方案。只需在基本更改事件中使用 id="textbox" 更新元素。因此,如果您使用 jQuery,解决方案将是

    $('#combo').change(function() {
        $('#textbox').val($('#combo').val());
    });
    

    认为客户端解决方案只会绑定输入组件的文本值。

【讨论】:

  • 感谢它的工作!我更喜欢使用带有 ajax 的监听器来获得我想要的东西。另外,我遇​​到了一个问题,mojarra 没有定义是什么使服务器停止并且无法运行我的代码。
猜你喜欢
  • 2011-07-17
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
相关资源
最近更新 更多