我在页面加载中创建了一组动态输入项。我需要在每个文本框改变其值时触发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){
}
- 是否有任何方法可以在"testListener"方法中获得值更改输入字段的新值?
- 否则这需要使用javascript来实现吗?
任何与此相关的反馈都非常感谢。
两种方式:
-
直接从父组件
<h:inputText>
中获取,然后从AjaxBehaviorEvent#getComponent()
中获得。UIInput input = (UIInput) event.getComponent(); String contentId = input.getId().substring("inputfield".length()); Object contentValue = (Content) input.getValue(); // ...
-
从请求属性映射中获取整个
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。