Jakarta ee J2EE primesfaces自动完成值检索

Jakarta ee J2EE primesfaces自动完成值检索,jakarta-ee,primefaces,autocomplete,Jakarta Ee,Primefaces,Autocomplete,如何检索primefaces自动完成的选定值 <p:autoComplete value="#{completeBean.selected1}" id="basicPojo1" completeMethod="#{completeBean.completePlayer}" var="p" itemLabel="#{p.getMateriel().getNumparc()}" itemValue="#{p}" converter="numparc" forceSelection=

如何检索primefaces自动完成的选定值

<p:autoComplete value="#{completeBean.selected1}"  
 id="basicPojo1" completeMethod="#{completeBean.completePlayer}"
 var="p" itemLabel="#{p.getMateriel().getNumparc()}" itemValue="#{p}" 
 converter="numparc" forceSelection="true"> 
    <f:ajax   execute="basicPojo1" listener="#{evenEdl.submitListener}" render="@all"/>
</p:autoComplete>


public void submitListener(AjaxBehaviorEvent event) {
    String id = event.getComponent().getId();
    switch (id) { 
        case "basicPojo1":
            String parametre = FacesContext.getCurrentInstance().getExternalContext()
                                      .getRequestParameterMap().get("basicPojo1");
            System.out.println("test param"+parametre);
                 break;
    }
}

公共无效提交者(AjaxBehaviorEvent事件){
字符串id=event.getComponent().getId();
开关(id){
案例“basicPojo1”:
字符串参数=FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get(“basicPojo1”);
系统输出打印项次(“测试参数”+参数);
打破
}
}

这里有一个p:autocomplete与实体转换器的示例:


脸:

<p:autoComplete id="autocomplete1" value="#{mBAutoComplete.selectedEntity}" completeMethod="#{mBAutoComplete.complete}"
    forceSelection="true" minQueryLength="3" maxResults="10">
    <p:ajax update="autocomplete1" event="itemSelect" listener="#{mBAutoComplete.updateEntity}" />
</p:autoComplete>
  @FacesConverter(forClass = Entity.class,value = "entityConveter")
  public class EntityConverter implements Converter {

      public EntityConverter() {

      }

      @Override
      public Entity getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
          // get Entity with WebService, but you can get it with other ways :
          // like calling EJB methods or using a Collection of Entity provided in
          // another managed bean
          return services.getWebService().getEntity(Integer.valueOf(arg2));
      }

      @Override
      public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
          return String.valueOf(((Entity) arg2).getEntityID());
      }
  }
@ManagedBean(name = "mBAutoComplete")
@SessionScoped
public class MBAutoComplete {

    // Entity
    private Entity selectedEntity;

    // Entity Autocomplete
    public List<String> complete(String query) {

        List<String> results = new ArrayList<String>();

        for (Entity en : this.eqList) {
            if (en.getEntityID().startsWith(query)) {
                results.add(en.getEntityID());
            }
        }

        return results;
   }

    public void updateEntity(SelectEvent e) {
         // Don't forget to check null Object sent by SelectEvent
         this.selectedEntity = (Entity) e.getObject();
    }

    // GETTERS & SETTERS

    public void setSelectedEntity(Entity e) {
         this.selectedEntity = e;
    }

    public Entity getSelectedEntity() {
         return this.selectedEntity();
    }

}

ManagedBean:

<p:autoComplete id="autocomplete1" value="#{mBAutoComplete.selectedEntity}" completeMethod="#{mBAutoComplete.complete}"
    forceSelection="true" minQueryLength="3" maxResults="10">
    <p:ajax update="autocomplete1" event="itemSelect" listener="#{mBAutoComplete.updateEntity}" />
</p:autoComplete>
  @FacesConverter(forClass = Entity.class,value = "entityConveter")
  public class EntityConverter implements Converter {

      public EntityConverter() {

      }

      @Override
      public Entity getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
          // get Entity with WebService, but you can get it with other ways :
          // like calling EJB methods or using a Collection of Entity provided in
          // another managed bean
          return services.getWebService().getEntity(Integer.valueOf(arg2));
      }

      @Override
      public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
          return String.valueOf(((Entity) arg2).getEntityID());
      }
  }
@ManagedBean(name = "mBAutoComplete")
@SessionScoped
public class MBAutoComplete {

    // Entity
    private Entity selectedEntity;

    // Entity Autocomplete
    public List<String> complete(String query) {

        List<String> results = new ArrayList<String>();

        for (Entity en : this.eqList) {
            if (en.getEntityID().startsWith(query)) {
                results.add(en.getEntityID());
            }
        }

        return results;
   }

    public void updateEntity(SelectEvent e) {
         // Don't forget to check null Object sent by SelectEvent
         this.selectedEntity = (Entity) e.getObject();
    }

    // GETTERS & SETTERS

    public void setSelectedEntity(Entity e) {
         this.selectedEntity = e;
    }

    public Entity getSelectedEntity() {
         return this.selectedEntity();
    }

}
@ManagedBean(name=“mbautomplete”)
@会议范围
公共类mbautomplete{
//实体
私人实体选择权;
//实体自动完成
公共列表完成(字符串查询){
列表结果=新建ArrayList();
for(实体en:this.eqList){
if(en.getEntityID().startWith(查询)){
results.add(en.getEntityID());
}
}
返回结果;
}
公共无效更新属性(选择事件e){
//不要忘记检查SelectEvent发送的空对象
this.selectedEntity=(实体)e.getObject();
}
//接球手和接球手
公共选择权(实体e){
这个。selectedEntity=e;
}
公共实体getSelectedEntity(){
返回此值。selectedEntity();
}
}

在本例中,您不需要使用FacesContext,只需使用SelectEvent和转换器


希望这有帮助

您希望从何处获取所选值?在submitListener方法中,我的侦听器工作正常,开关检索ID(框“basicPojo1”->ok)。在本文中,我希望检索autocomplete jsf的所选(字符串参数中)值以执行Bean端处理,但我没有成功地使用这个字符串参数:FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“basicPojo1”);不完全确定你想要实现什么。您需要如何处理所选的值?当您在“自动完成”中选择一个值时,它将在表单最终提交时绑定到completeBean.selected1。或者,您是否正在尝试在选择值后立即填充其他内容?My completeBean.selected1始终为空,并且我无法恢复任何内容。请查看primefaces showcase:这是您想要的吗?仔细看看p:ajax