JSf2将ajax请求发送到各个输入元素的服务器



我在页面加载中创建了一组动态输入项。我需要在每个文本框改变其值时触发ajax请求。我需要得到改变的值和改变的项目的id。

<h:form> <ui:repeat value="#{aBean.inputItems}" var="content"> 
<h:inputText id="inputfield#{content.id}" value="#{content.value}" label="lbl" >
         <f:ajax execute="@form" event="valueChange" listener="#{aBean.testListener}" render="@this"/>
</h:inputText> 
</ui:repeat> 
</h:form>

我的后台bean(aBean)有一个方法。

public void testListener(AjaxBehaviorEvent event){
}
  1. 是否有任何方法可以在"testListener"方法中获得值更改输入字段的新值?
  2. 否则这需要使用javascript来实现吗?

任何与此相关的反馈都非常感谢。

两种方式:

  1. 直接从父组件<h:inputText>中获取,然后从AjaxBehaviorEvent#getComponent()中获得。

    UIInput input = (UIInput) event.getComponent();
    String contentId = input.getId().substring("inputfield".length());
    Object contentValue = (Content) input.getValue();
    // ...
    
  2. 从请求属性映射中获取整个Content对象作为当前<ui:repeat var>值,而请求属性映射可以从ExternalContext#getRequestMap()中获得。

    Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
    Content content = (Content) requestMap.get("content");
    // ...
    

1)是的,您更改侦听器内部的值。它应该是:

this.property = newValue;

2)如果你在服务器上做,那么不涉及JavaScript。

相关内容

  • 没有找到相关文章

最新更新