JSF ajax监听器需要知道文本字段何时为空

时间:2017-08-03 13:30:05

标签: jsf primefaces

我需要一个侦听器函数来检测用户何时清除inputText字段。当文本字段输入一个新字符串时,立即更新支持bean值,然后调用监听器函数,但是,通过调试我注意到当清除字符串时,不会设置辅助bean变量在侦听器返回之前为null。由于我的侦听器函数依赖于(backingBeanvariable == null)测试,这导致我的功能出错。有办法解决这个问题吗?

我的xhtml:

<p:column>
    <p:inputText id="inputText" value="#{backingBean.variable}"
        title="someTitle">
        <p:ajax resetValues="true" listener="#{backingBean.onChange()}" />
    </p:inputText>
</p:column>

Backing Bean监听器功能:

public void onUiiTypeChange()
{
    if (variable == null)
    {
        // some logic
    }
}

编辑:当清除字段时,变量可能设置为空字符串reather而不是null。无论哪种方式,直到侦听器函数返回之后才会发生这种情况。即如果该字段包含&#34; asdf&#34;在它被清除之前,变量仍将被设置为&#34; asdf&#34;何时调用侦听器函数。

2 个答案:

答案 0 :(得分:1)

要实现这一点,p:ajax标记应该有一个事件,当用户与您的输入字段进行交互时会监听该事件。这可以通过将event标记的p:ajax属性设置为侦听器值来完成。要了解event属性的这些可接受值,我将向您指出answered question

你的小脸:

<p:column>
    <p:inputText id="inputText" value="#{backingBean.variable}"
        title="someTitle">
        <!--added attribute event-->
        <p:ajax resetValues="true" listener="#{backingBean.onChange()}" event="onblur"/>
    </p:inputText>
</p:column>

现在在你的bean方法中接受AjaxBehaviorEvent作为参数并返回void,你将逻辑放在那里: 例如

public void onChange(AjaxBehaviorEvent event){

  //there are other ways to do this
  String[] array = yourValue.split(" ");
  //do something if array length satisfies your condition
  //etc
}

最重要的是要注意,JSF EMPTY STRING不等同于NULL STRING,这是默认设置。要特地说明您需要在web.xml文件中明确指出

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

您的JSF版本和服务器将扮演更重要的角色。 reference here

答案 1 :(得分:0)

我不确定,但在用户重置后,变量不是空字符串。这样您就必须检查variable.equals("")