【问题标题】:JSF ajax listener needs to know when text field is emptyJSF ajax 监听器需要知道文本字段何时为空
【发布时间】:2017-08-03 13:30:05
【问题描述】:

我需要一个侦听器函数来检测用户何时清除了 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
    }
}

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

【问题讨论】:

  • 仅供参考,您的示例在我的设置中正常工作,我无法重现。似乎存在不一致,正如您所说,您通过调试看到该字段在调用侦听器后更新为 null,但是您正确地注意到该变量可能已设置为空字符串(这是默认行为)。因此,更彻底的调试可能会告诉您发生了什么。
  • 请按照stackoverflow.com/tags/jsf/info的要求将PF和JSF版本添加到问题中

标签: jsf primefaces


【解决方案1】:

要实现您的p:ajax 标签应该有一个事件,当用户与您的输入字段交互时进行侦听。这可以通过将p:ajax 标记的event 属性设置为侦听器值来完成。要了解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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您可能是对的,它被设置为空字符串而不是 null,但无论哪种方式,直到侦听器函数返回后才设置它。
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多