selectOneMenu ajax事件

leo*_*tiw 30 ajax jsf primefaces

我使用可编辑的primefaces selectOneMenu来显示一些值.如果用户从列表中选择项目,则应更新文本区域.但是,如果用户在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}" />
Run Code Online (Sandbox Code Playgroud)

Dan*_*lor 61

PrimeFaces ajax事件有时记录很差,因此在大多数情况下,您必须查看源代码并检查自己.

p:selectOneMenu支持更改事件:

<p:selectOneMenu ..>
    <p:ajax event="change" update="msgtext"
        listener="#{post.subjectSelectionChanged}" />
    <!--...-->
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

AjaxBehaviorEvent在签名中触发侦听器作为参数:

public void subjectSelectionChanged(final AjaxBehaviorEvent event)  {...}
Run Code Online (Sandbox Code Playgroud)

  • 现在事件名称不是必需的,我们可以使用 &lt;p:ajax update="msgtext" listener="#{post.subjectSelectionChanged}" /&gt; (2认同)

Mic*_*mal 9

我宁愿使用更方便的itemSelect事件。通过此事件,您可以org.primefaces.event.SelectEvent在侦听器中使用对象。

<p:selectOneMenu ...>
    <p:ajax event="itemSelect" 
        update="messages"
        listener="#{beanMB.onItemSelectedListener}"/>
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

有了这样的听众:

public void onItemSelectedListener(SelectEvent event){
    MyItem selectedItem = (MyItem) event.getObject();
    //do something with selected value
}
Run Code Online (Sandbox Code Playgroud)