我有这样的代码
<a4j:region>
<h:inputText label="User" id="user" size="30" value="#{bean2.val1}" required="true" >
<a4j:support event="onblur" action="#{bean.action}" reRender="outputName" bypassUpdates="true">
<a4j:actionparam name="user" assignTo="#{bean.user}" value="#{user}" />
</a4j:support>
</h:inputText>
</a4j:region>
<h:message for="user"/>
我的bean类是这样的:
private String user;
public String getUser() {
System.out.println("user=="+user);
return user;
}
public void setUser(String user) {
this.user = user;
}
public void action(){
getUser();
}
但是每次发生onblur事件时,用户的值都是空的。
我只想在onblur事件发生时将用户发送给bean的值。所以我可以获得用户的价值。 有人可以帮帮我吗? (对不起我的英语)
答案 0 :(得分:0)
嗯,#{user}
的值总是为null - 请求属性中没有这样的东西。您可以删除<a4j:actionparam
,只需离开<a4j:support
,最好放ajaxSignle=true
。这将首先提交文本输入的值,然后执行操作(至少它应该)。还要immediate=true
绕过验证。
在您发表评论后,我想您也可以尝试:
<a4j:actionparam name="user" assignTo="#{bean.user}" value="#{bean2.val1}" />
或者手动在action
方法中进行分配。只需将第二个bean注入第一个bean(假设您使用DI框架)
答案 1 :(得分:0)
正如已经指出的那样,该值将始终为null,因为它永远不会是se。如果需要该值,可以将托管属性val1从bean2注入bean。
使用ManagedProperty:
class Bean {
@ManagedProperty{value="#{bean2.val}"
private user;
}
该值将自动注入。