时间:2010-01-19 11:17:06

标签: jsf richfaces

我有这样的代码

<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的值。所以我可以获得用户的价值。 有人可以帮帮我吗? (对不起我的英语)

2 个答案:

答案 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;
}

该值将自动注入。