问题描述 投票:0回答:2

我有这样的代码

<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事件发生时,用户的值总是为null。

我只想在onblur事件发生时将用户发送给bean的值。所以我可以获得用户的价值。有人可以帮帮我吗? (对不起我的英语)

jsf richfaces
2个回答
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框架)


0
投票

正如已经指出的那样,该值将始终为null,因为它永远不会是se。如果需要该值,可以将托管属性val1从bean2注入bean。

使用ManagedProperty:

class Bean {
    @ManagedProperty{value="#{bean2.val}"
    private user;
}

该值将自动注入。

© www.soinside.com 2019 - 2024. All rights reserved.