change value在java,valueChangeListener使用注意事项

运行健康的示例。页面代码

请选择课程类别

课程类别:

οnchange="submit()" valueChangeListener="#{course.categoryChanged}"

immediate="true">

课程:

categoryChanged方法源码为

public void categoryChanged(ValueChangeEvent event) {

FacesContext context = FacesContext.getCurrentInstance();

if ("language".equals((String) event.getNewValue())) {

courses.clear();

for (int i = 0; i < courseNames[0].length; ++i) {

courses.add(new SelectItem(courseNames[0][i]));

}

} else if ("datebase".equals((String) event.getNewValue())) {

courses.clear();

for (int i = 0; i < courseNames[1].length; ++i) {

courses.add(new SelectItem(courseNames[1][i]));

}

} else {

courses.clear();

}

context.renderResponse();

}

这是一个valueChangeListener可以正常运行的情况,其中有两点要注意:

1、 标签中 immediate="true"不可少。如果缺少该属性则会出现当第一次触发该事件时程序可以正常使用,但当第二次触发时会报

严重: JSF1054: (Phase ID: PROCESS_VALIDATIONS 3, View ID: /actionEvent/event1.jsp) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@32bd65]

2009-6-28 13:47:42 org.apache.catalina.core.StandardWrapperValve invoke

严重: Servlet.service() for servlet Faces Servlet threw exception

java.util.NoSuchElementException

at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:130)

at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:157)

at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:61)

2、在监听方法 categoryChanged 中  context.renderResponse(); 不能少,如果少了该方法,虽然可以成功触发监听时间,但程序后台会有如下警告

信息: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.

sourceId=event1Form:j_id_jsp_1462394538_5[severity=(ERROR 2), summary=(event1Form:j_id_jsp_1462394538_5: Validation Error: Value is not valid), detail=(event1Form:j_id_jsp_1462394538_5: Validation Error: Value is not valid)]

将的globalOnly属性更改为false上述警告消失,但在页面上会打印event1Form:j_id_jsp_1462394538_5: Validation Error: Value is not valid

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值