selectOneMenu用于AJAX事件

问题描述 投票:29回答:4

我使用的是可编辑primefaces selectOneMenu用于显示一些值。如果用户从列表中选择一个项目一个textarea应该更新。但是,如果用户键入的东西在selectOneMenu用于,textarea的不应该被更新。

我以为我可以用AJAX事件出来工作这一点。不过,我不知道我可以使用哪些事件在这里。我只知道valueChange事件。是否还有其他的活动,如onSelectonKeyUp

这里是我的代码:

<p:selectOneMenu id="betreff" style="width: 470px !important;"  
            editable="true" value="#{post.aktNachricht.subject}">
            <p:ajax event="valueChange" update="msgtext"
                listener="#{post.subjectSelectionChanged}" />
            <f:selectItems value="#{post.subjectList}" />
</p:selectOneMenu>

<p:inputTextarea style="width:550px;" rows="15" id="msgtext"
        value="#{post.aktNachricht.text}" />
ajax jsf primefaces
4个回答
61
投票

有时PrimeFaces AJAX事件很差记载,所以在大多数情况下,你必须去的源代码,并检查自己。

p:selectOneMenu支持更改事件:

<p:selectOneMenu ..>
    <p:ajax event="change" update="msgtext"
        listener="#{post.subjectSelectionChanged}" />
    <!--...-->
</p:selectOneMenu>

触发听者AjaxBehaviorEvent为特征参数:

public void subjectSelectionChanged(final AjaxBehaviorEvent event)  {...}

3
投票

请注意该页面不包含您selectOneMenu用于组件运行前已经“必需的”属性为“真”的任何空组件。 如果您使用的组件如

<p:inputText label="Nm:" id="id_name" value="#{ myHelper.name}" required="true"/>

然后,

<p:selectOneMenu .....></p:selectOneMenu>

和忘记填写所需组件,selectOneMenu用于的AJAX听者不能被执行。


2
投票

你可以检查你的selectOneMenu组件的值是否属于以下科目列表中。

即:

public void subjectSelectionChanged() {
    // Cancel if subject is manually written
    if (!subjectList.contains(aktNachricht.subject)) { return; }
    // Write your code here in case the user selected (or wrote) an item of the list
    // ....
}

据说subjectList是集合类型,像ArrayList。当然,这里的情况下,用户写你的selectOneMenu清单的项目代码运行。


2
投票

我宁愿使用更方便itemSelect事件。有了这个事件,你可以在你的听众使用org.primefaces.event.SelectEvent对象。

<p:selectOneMenu ...>
    <p:ajax event="itemSelect" 
        update="messages"
        listener="#{beanMB.onItemSelectedListener}"/>
</p:selectOneMenu>

有了这样监听器:

public void onItemSelectedListener(SelectEvent event){
    MyItem selectedItem = (MyItem) event.getObject();
    //do something with selected value
}
© www.soinside.com 2019 - 2024. All rights reserved.