首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >valuechangelistener不填充文本框中的值

valuechangelistener不填充文本框中的值
EN

Stack Overflow用户
提问于 2012-02-02 20:24:46
回答 1查看 2.8K关注 0票数 1

下面是我的jsp:

代码语言:javascript
运行
复制
<h:selectOneMenu value="#{member.dependentName}" onchange="this.form.submit()"
immediate="true" valueChangeListener="#{member.getDependentAddress}">
   <f:selectItems value="#{member.dependentList}" />
 </h:selectOneMenu> 
   <h:inputText value="#{member.personName}" immediate="true" />
   <h:inputText value="#{member.dob}" immediate="true" />

这样,函数valuechangelistener就会触发。

代码语言:javascript
运行
复制
 public void getDependentAddress(ValueChangeEvent e) {  
    setPersonName((getDependentsList().get(e.getNewValue().toString())
            .getDependentName()));
    setDob(getDependentsList().get(e.getNewValue().toString()).getBirth());
    System.out.println("New dob value : " + dob);
    System.out.println("New name value : " + personName);
    FacesContext.getCurrentInstance().renderResponse();
}

这两个系统在控制台中给出了新值,但是一旦页面加载,这些字段就为空。我已经尝试了bean的所有作用域。不行。我遗漏了什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-02 20:34:27

你什么都没错过。你只是有些东西太多了。要使其正常工作,您应该从要更改的组件中删除immediate="true"

代码语言:javascript
运行
复制
<h:selectOneMenu value="#{member.dependentName}" onchange="this.form.submit()"
   immediate="true" valueChangeListener="#{member.getDependentAddress}">
   <f:selectItems value="#{member.dependentList}" />
</h:selectOneMenu> 
<h:inputText value="#{member.personName}" />
<h:inputText value="#{member.dob}" />

UIInput组件上的immediate="true"将使其验证阶段改为应用请求值阶段。这使您有机会在valueChangeListener方法中使用FacesContext#responseComplete(),跳过处理中未设置immediate="true"的其他组件。与您现在使用immediate="true"时一样,它们也会被处理。

请注意,这本质上是对旧JSF 1.x版本的攻击。如果您已经在使用JSF2.x,那么您应该改用<f:ajax listener>

代码语言:javascript
运行
复制
<h:selectOneMenu value="#{member.dependentName}">
   <f:selectItems value="#{member.dependentList}" />
   <f:ajax listener="#{member.getDependentAddress}" render="name dob" />
</h:selectOneMenu> 
<h:inputText id="name" value="#{member.personName}" />
<h:inputText id="dob" value="#{member.dob}" />

使用

代码语言:javascript
运行
复制
public void getDependentAddress() {
    Dependent dependent = getDependentsList().get(dependentName); // Isn't that actually a Map instead of List?
    personName = dependent.getDependentName();
    dob = dependent.getBirth();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9112271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档