对于完全相同的JSF EL表达式,getter被调用用于ouputText,而不是inputText。为什么?

对于完全相同的JSF EL表达式,getter被调用用于ouputText,而不是inputText。为什么?,jsf,Jsf,这是我的JSF页面 <h:form> First Name: <h:inputText value="#{userBean.first}" valueChangeListener="#{userBean.updateLastName}" onblur="submit()"/><br/> Last Name: <h:inputText value="#{userBean.last}"/><br/> La

这是我的JSF页面

<h:form>
      First Name: <h:inputText value="#{userBean.first}" valueChangeListener="#{userBean.updateLastName}" onblur="submit()"/><br/>
      Last Name: <h:inputText value="#{userBean.last}"/><br/>
      Last Name: <h:outputText value="#{userBean.last}"/><br/> </h:form>

名字:
姓氏:
姓氏:
下面是托管bean代码

@Named
@RequestScoped
public class UserBean {
    private Map<String, String> names;

    private String first, last;

    public UserBean() {
        names = new  HashMap<>();
        names.put("first1", "last1");
        names.put("first2", "last2");
    }

    public String getFirst() {return first;}
    public void setFirst(String first) {this.first = first;}
    public String getLast() {return last;}
    public void setLast(String last) {this.last = last;}
    public void updateLastName(ValueChangeEvent e){
        last = names.get(e.getNewValue().toString());
        FacesContext.getCurrentInstance().renderResponse();
    }

}
@Named
@请求范围
公共类用户bean{
私人地图名称;
私有字符串第一个,最后一个;
公共用户bean(){
name=新的HashMap();
姓名。填写(“first1”、“last1”);
姓名。填写(“first2”、“last2”);
}
公共字符串getFirst(){return first;}
public void setFirst(字符串优先){this.first=first;}
公共字符串getLast(){return last;}
public void setLast(String last){this.last=last;}
public void updateLastName(ValueChangeEvent e){
last=names.get(例如getNewValue().toString());
FacesContext.getCurrentInstance().renderResponse();
}
}
现在,当我在FirstName字段中键入“first1”并进行制表时,我在outputText字段中看到“last1”,但inputText字段仍然为空


我进行了调试,发现getter只被调用了一次,所以我想知道为什么没有为inputText调用getter?考虑到EL表达式完全相同,并且基于我的知识,应该在渲染响应阶段调用getter???

脱离主题:为什么要以这种方式实现它?您正在使用JSF1.2吗?否则,最好切换到使用ajaxIs作为您的请求范围?每个语句都是一个请求吗?@Kukeljet-是的,我现在知道ajax是更好的方法,它可以与ajax一起工作,但我想知道为什么会发生这种情况?@SamOrozco-正如您在我的代码中看到的,它是会话范围。我在您的代码中看不到它。它说
@requestScoped
脱离主题:为什么要这样实现它?您正在使用JSF1.2吗?否则,最好切换到使用ajaxIs作为您的请求范围?每个语句都是一个请求吗?@Kukeljet-是的,我现在知道ajax是更好的方法,它可以与ajax一起工作,但我想知道为什么会发生这种情况?@SamOrozco-正如您在我的代码中看到的,它是会话范围。我在您的代码中看不到它。它说
@requestScoped