我很惊讶地看到,当通过javascript方法更改inputText的值时,不会触发事件valueChange。 但是,当我手动更改inputText的值时会触发它。
您可以测试下面的代码来感知这一点,也许您可以提供一个解决方案,以便在javascript函数更改组件的值时触发事件。
xhtml页面:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
>
<body>
<script type="text/javascript">
function testValueChange() {
console.log("testValueChange called");
var inputHCodes = document.getElementById('form:inptHCodes');
inputHCodes.value = "new value";
}
</script>
<h:form>
<p:commandButton type="button" value="BUTTON" onclick="testValueChange();"/>
<h:inputText id="inptHCodes" value="#{questionnaireExtendedKeyAttribute.selectedInputCodes}">
<p:ajax event="valueChange" listener="#{questionnaireExtendedKeyAttribute.testValueChangeListener}"/>
</h:inputText>
</h:form>
</body>
</html>
支持bean的监听器:
public void testValueChangeListener(AjaxBehaviorEvent abe) {
UIInput uiinput = (UIInput) abe.getSource();
String id = uiinput.getId();
selectedInputCodes = uiinput.getValue().toString();
logger.debug("### value : " + selectedInputCodes + " and id is: " + id);
}