我需要一个侦听器函数来检测用户何时清除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;何时调用侦听器函数。
答案 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("")
。