当javascript函数改变组件的值时,不会触发primefaces ajax的valueChange事件

时间:2016-10-12 13:41:11

标签: javascript ajax jsf primefaces

我很惊讶地看到,当通过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);
}

0 个答案:

没有答案