JSF ValueChangeListener导致的问题

本文探讨了在JSP页面中使用JSF框架时遇到的一个特殊问题:由于selectOneMenu控件的valueChangeListener事件未正确处理,导致用户输入的数据未能提交到后台bean。文章详细解释了事件触发的时机及如何解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天碰到一个奇怪的问题:

JSP画面提交时,入力框上的值无法提交到绑定的后台bean上,但是同样的代码在别处就没有问题。

经过一个一个控件排查,发现原来是selectOneMenu 下拉框的valueChangeListener事件导致的

 

原因是 在画面初期化时,取到的下拉框的值 不在 下拉框的选项里,所以画面显示时,默认选择第一条。

由于这时下拉框的选择值和绑定的值不一样,在画面提交时,先触发了valueChangeListener事件,

而valueChangeListener事件 默认是不提交画面的,所以画面上入力的值没有反映到后台bean里。

 

参考:

action                无参数,不传入当前控件,有返回值      

                         当铵钮被单击时产生事件.提交表单                          

                         返回页面---根据配置文件跳转
actionListener   传入当前控件,无返回值               

                          当铵钮被单击时产生事件.提交表单                           

                          返回本页面
ValueChangeListener   传入当前控件,无返回值               

                                     不提交表单

                                     返回本页面

 

action()处理的是业务逻辑.实际上JSF会自动产生一个"预设的ActionListener"来处理事件,

            并根据其返回值决定页面跳转.第五阶段:调用应用执行

            主要处理一些业务逻辑并返回几个业务逻辑结果(String类型),

            JSF的导航系统将会根据这个来选择恰当的下一个页面. 会提交表单.

 

actionListener(ActionEvent e)处理页面上组件的"监听事件".第五阶段:调用应用执行
          不会影响到导航.主要操作当前页面内的组件,或者是进行一些业务模型上的改变,

           或者是修改backing bean(托管Bean)的属性等,并不会出现在页面间的跳转。会提交表单.

 

valueChangeListener(ValueChangeEvent event)处理页面上组件值变化的"监听事件",

                                                                            "第三阶段:验证请求值"执行


actionListener(事件监听器)是用于解决只影响用户界面的事件
        特别地,在beans的form数据被加载和触发验证前被调用
        用immediate=“true”指明这个行为不触发验证
        在监听器调用后,会重新显示表单
        不应用导航规则,不重定向页面
action
        隶属于按钮、超链接和图形映射控件
        自动提交对应表单
valueChangeListener
        隶属于单选框、组合框、列表框、复选框、文本框等控件
        需要用onclick=“submit()”或onchange=“submit()”的方式提交表单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值