更新selectOneMenu用于如果ohter selectOneMenu用于的设置值(事件不会触发) [英] Update SelectOneMenu if value of ohter SelectOneMenu is set (Event isn't fired)

查看:126
本文介绍了更新selectOneMenu用于如果ohter selectOneMenu用于的设置值(事件不会触发)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序,我想设置/更新selectOneMenu用于如果另一个selectOneMenu用于设置。我们使用primefaces,所以我检查了primefaces展示,发现正是我一直在寻找。遗憾的是它不工作。该事件不会激发,我不知道为什么。希望你能帮助我。

链接到primefaces的示例展示

- >如果将语言设置,它会自动重新加载列表与问候,但事实并非如此。我要preSS F5重新加载。任何想法?

我的XHTML code

 < H:格式ID =addressBasicsForm>
  <电话号码:咆哮的id =咆哮粘=真正的showDetail =真/>
  <电话号码:TabView的ID =TabView的>
    <电话号码:标签ID =stammdaten标题=#{msg.adr_basics_tabtitle}>
  <表格样式=宽度:100%;>
        &其中; TR>
          < TD风格=宽度:50%;>
    <电话号码:面板可切换=假>
      <表格样式=的margin-top:的3px;宽度:100%;>
        < TR风格=HEIGHT:26px;>
          < TD>
            <电话号码:selectOneMenu用于ID =somLang值=#AddressBasics_m.languageId}的风格=保证金左:2px的;宽度:90%;>
              < F:selectItems的值=#{AddressBasics_m.languageItems}/>
                      <电话号码:AJAX更新=somAnrede监听器=#{AdressBasics_m.handleLanguageChange}/>
            < / P:selectOneMenu用于>
          < / TD>
        < / TR>
        < TR风格=HEIGHT:26px;>
          < TD>
            <电话号码:selectOneMenu用于ID =somAnrede值=#AddressBasics_m.salutationId}的风格=保证金左:2px的;宽度:90%;>
              < F:selectItems的值=#{AddressBasics_m.salutationItems}/>
            < / P:selectOneMenu用于>
          < / TD>
 

我的豆

  @Named(AddressBasics_m)
@ConversationScoped
公共类AddressBasicsView实现Serializable {
私有静态最后长的serialVersionUID = -4034697810438325785L;

公开名单<的SelectItem> getSalutationItems(){
    如果(firstrun)
        languageId = 21L;

    firstrun = FALSE;
    如果(salutationItems == NULL || lastLanguageId!= languageId){
        salutationItems = addressService.getAllSalutationsByLangId(languageId);
        setLastLanguageId(languageId);
    }
    返回salutationItems;
}

公共无效handleLanguageChange(){
    this.salutationItems = getSalutationItems();
}
 

解决方案

我认为这个问题是在你的Ajax调用。 阿贾克斯可能会非常棘手,我会推荐两种不同途径的几点思考:

 <电话号码:AJAX渲染=@形式的监听器=#{AdressBasics_m.handleLanguageChange}/>
 

 <电话号码:AJAX更新=:addressBasicsForm:TabView的:stammdaten:somAnrede监听器=#{AdressBasics_m.handleLanguageChange}/>
 

In my application I'm trying to set/update a SelectOneMenu if another SelectOneMenu is set. We're using primefaces, so I checked the primefaces showcase and found exactly what I was looking for. Unfortunately it's not working. The Event isn't fired and I don't know why. Hopefully you can help me

Link to the Example of the primefaces showcase

-> If the language is set, it should automatically reload the list with the salutations, but it doesn't. I have to press F5 to reload. Any ideas?

My xhtml code

<h:form id="addressBasicsForm">
  <p:growl id="growl" sticky="true" showDetail="true"/>
  <p:tabView id="tabView">
    <p:tab id="stammdaten" title="#{msg.adr_basics_tabtitle}">
  <table style="width:100%;">
        <tr>
          <td style="width: 50%;">
    <p:panel toggleable="false">
      <table style="margin-top:3px; width:100%;">
        <tr style="height:26px;">
          <td>
            <p:selectOneMenu id="somLang" value="#AddressBasics_m.languageId}" style="margin-left:2px; width:90%;">
              <f:selectItems value="#{AddressBasics_m.languageItems}"/>
                      <p:ajax update="somAnrede" listener="#{AdressBasics_m.handleLanguageChange}"/>
            </p:selectOneMenu>
          </td>
        </tr>
        <tr style="height:26px;">
          <td>
            <p:selectOneMenu id="somAnrede" value="#AddressBasics_m.salutationId}" style="margin-left:2px; width:90%;">
              <f:selectItems value="#{AddressBasics_m.salutationItems}" />
            </p:selectOneMenu>
          </td>

My Bean

@Named("AddressBasics_m")
@ConversationScoped
public class AddressBasicsView implements Serializable{
private static final long serialVersionUID = -4034697810438325785L;

public List<SelectItem> getSalutationItems(){
    if(firstrun)
        languageId = 21L;

    firstrun = false;
    if(salutationItems == null || lastLanguageId != languageId){
        salutationItems = addressService.getAllSalutationsByLangId(languageId);
        setLastLanguageId(languageId);
    }
    return salutationItems;
}

public void handleLanguageChange(){
    this.salutationItems = getSalutationItems();
}

解决方案

I believe that the problem is on your Ajax call. Ajax could be very tricky, I would recommend 2 different approachs:

<p:ajax render="@form" listener="#{AdressBasics_m.handleLanguageChange}"/>

or

<p:ajax update=":addressBasicsForm:tabView:stammdaten:somAnrede" listener="#{AdressBasics_m.handleLanguageChange}"/>

这篇关于更新selectOneMenu用于如果ohter selectOneMenu用于的设置值(事件不会触发)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆