·
编程代码 ·
57443
本文将探讨在JSF/XHTML应用中,如何正确使用JSF组件来处理表单提交、数据绑定和方法调用,而非直接依赖原生HTML元素。我们将重点讲解和等JSF标签与Java EE Managed Bean的集成,以实现功能完善的用户交互,并纠正常见的错误用法。
在javaserver faces (jsf) 开发中,尤其是在使用xhtml作为视图层时,开发者常遇到的一个误区是将原生html元素与jsf的表达式语言 (el) 混用,期望它们能像jsf组件一样自动处理数据绑定和方法调用。然而,jsf框架的核心在于其组件模型和生命周期,原生html元素并不能直接参与其中。
JSF组件与原生HTML元素的区别
JSF提供了一套丰富的UI组件库,如、、等。这些组件在服务器端由JSF框架管理,它们能够理解并处理EL表达式(如#{bean.property}或#{bean.method}),从而实现数据绑定、事件处理和验证等功能。当JSF页面被渲染时,这些JSF组件会被转换为相应的原生HTML元素发送到客户端浏览器。
相反,原生HTML元素(如
)仅仅是静态的标记,它们不会被JSF框架在服务器端进行特殊处理。这意味着,像action="#{InternetBean.create}"这样的EL表达式如果直接应用于原生HTML元素的action属性,将不会被JSF解析和执行,从而导致预期的服务器端方法无法触发。
正确处理表单提交:使用
要触发JSF Managed Bean中的方法,例如在点击按钮时执行数据创建、更新或删除操作,必须使用JSF提供的命令组件,最常见的是。
错误示例:
此处的action属性是原生HTML
正确做法:
使用组件,并将其action属性绑定到Managed Bean的方法。
注意事项:
- 通常需要放置在标签内才能正确提交数据并触发action。
- value属性用于设置按钮上显示的文本。
- action属性指向Managed Bean中一个无参数或返回String(用于导航)的方法。
- rendered属性可用于根据条件控制组件的显示,例如在编辑模式下才显示“更新”和“删除”按钮。
正确处理输入数据绑定:使用
对于用户输入的数据,要将其绑定到Managed Bean的属性上,也需要使用JSF的输入组件,如。
错误示例:
这里的action属性被错误地用作数据绑定。原生HTML 元素没有JSF的value属性来支持EL表达式的数据绑定。
正确做法:
使用组件,并将其value属性绑定到Managed Bean的属性。
Not Link
Açıklama
注意事项:
- 的value属性支持双向绑定,即既可以显示Bean属性的值,也可以在表单提交时将用户输入的值更新到Bean属性。
- 通常会配合使用,通过for属性关联输入框,提升可访问性。
- 输入组件也应包含在标签内。
关于Managed Bean的命名约定
JSF通过EL表达式查找Managed Bean。Managed Bean的名称通常由其类名决定,或者通过@Named注解的value属性明确指定。
- 如果一个Managed Bean类(例如InternetBean.java)使用了@Named注解但没有指定value,那么它的EL名称通常是类名首字母小写,例如internetBean。
- 如果@Named("MyCustomBean"),那么EL名称就是myCustomBean。
- 在您的代码中,如果Managed Bean类名为InternetBean且没有指定@Named的value,那么正确的EL表达式应该是#{internetBean.create}(小写开头)。如果指定了@Named("InternetBean"),那么#{InternetBean.create}才是正确的。请根据您的Managed Bean定义进行核对。
修正后的XHTML代码示例
结合上述原则,以下是修正后的internetprog.xhtml片段,展示了如何正确使用JSF组件:
İnternet Programcılığı
ID
#{e.id}
NOT LİNK
#{e.ilink}
AÇIKLAMA
#{e.idescription}
TARİH
#{e.createdate}
Not Link
Açıklama
关于ui:repeat和:
虽然原始代码中的ui:repeat结合原生
可以用于数据显示,但JSF提供了更强大的组件,它能更好地集成JSF的特性,例如自动生成表头、支持分页、排序等。在上面的修正代码中,我将
替换为以展示更专业的JSF用法。
总结与最佳实践
-
使用JSF组件: 始终使用JSF提供的组件(如、、等)来处理用户交互、数据输入和显示,以便充分利用JSF的组件模型和生命周期。
-
EL表达式: EL表达式#{...}是JSF与Managed Bean通信的桥梁,它必须应用于JSF组件的相应属性(如action、value),而非原生HTML元素的属性。
-
的重要性: 所有需要提交数据或触发Managed Bean方法的JSF组件都必须包含在标签内。一个页面可以有多个。
-
Managed Bean命名: 确保EL表达式中引用的Managed Bean名称与@Named注解或JSF默认命名规则一致。
-
清晰的结构: 保持XHTML代码结构清晰,合理使用JSF组件可以使页面逻辑更易于理解和维护。
遵循这些原则将帮助您构建健壮且功能完善的JSF应用程序,避免因混淆原生HTML与JSF组件而导致的常见问题。
以上就是JSF/XHTML中正确处理表单提交与数据绑定的教程的详细内容,更多请关注昆居客【www.kunjuke.com】。
7 月 6 日消息,微软 Win11 效率神器 PowerToys 有一个名为“唤醒”的工具,可以临时覆盖系统的睡眠机制,而无需更改操作系统电源计划。这个“唤醒”工具目前支持无限期保持唤醒、保持唤醒时间间隔、保持唤醒状态直到过期。而根据 PowerToys 在 GitHub 上新发布的一项提案,“唤醒”工具即将迎来重大改进。提案概述了重新设计的“唤醒”弹出菜单,旨在让用户无需通过“设置”应用或系统...
感谢网友 不一样的体验、吉茵珂絲 的线索投递! 7 月 2 日消息,《冒险岛》怀旧服官方微博今日宣布,本作第二次非公开测试已于 7 月 2 日 14 点正式开启。据介绍,在第二次测试服务器中,《冒险岛》怀旧服主要围绕交易系统与游戏内容两大方向进行了调整:交易系统调整移除金币绑定游戏角色的设定添加面对面交易 (可以选择金币或抵用券进行交易)拍卖场添加金币作为交易货币 (可以选择金币或抵用券进行交易)...
单多多App绑定抖音号需通过「≡」→「账号中心」→「第三方账号绑定」入口,支持扫码直连或手机号授权两种方式,须确保抖音号已绑定四大运营商实名手机号且App为v33.0.0以上版本。 单多多App需要绑定抖音号才能同步商品、管理短视频带货和查看跨平台数据,但它的绑定入口藏得深,很多人点错位置导致反复失败。 确认账号状态与前置条件 打开单多多App,确保你已用手机号完成注册并实名认证。未实名的账号在绑...
必须用官方“小米运动”App(非小米穿戴),授权蓝牙定位权限,手环电量>30%、手机系统达标,进入配对模式后贴近手机输入4位验证码即可绑定成功。 要把小米手环3成功绑定到手机上,必须用“小米运动”App(不是小米穿戴),且不能跳过蓝牙位置权限授权这步——安卓用户若没开定位,App根本搜不到手环,iOS用户则需在设置里把定位权限设为“使用期间”。 确认基础条件是否满足 先检查手环电量是否高于30%,...
Chrome自动填充干扰可六种方式关闭:全局禁用三项主开关、清除本地表单数据、为特定网站单独屏蔽、停用实验性键盘辅助功能、使用无痕窗口临时规避、通过HTML代码前端禁用。 当你在Chrome浏览器中填写注册表单、收货地址或支付信息时,网页突然弹出一串姓名电话邮箱的下拉建议,甚至自动把银行卡号填进输入框——这不仅干扰操作,还可能误提交敏感数据。下面提供六种可单独或组合使用的关闭方式,覆盖全局禁用、网...
需确认风险绑定提示源于账号环境异常,应依次执行设备绑定重确认、环境安全复检、启用账号锁定、同步设备白名单及命令行强制绑定五步操作。 如果您在紫鸟浏览器中启动店铺账号时收到“需确认风险绑定”提示,或系统反复要求二次校验设备与账号关系,则可能是由于账号环境存在异常指纹、IP归属波动、未完成可信设备强关联等安全策略触发。以下是完成风险绑定确认的具体操作步骤: 一、检查并重新确认设备绑定状态 风险绑定提示...
需同时开启浏览器自动填充开关、设为系统默认填充服务、首次登录并保存凭证三步,缺一不可;否则无法实现下次登录自动填充账号密码。 你想在宙斯浏览器里输入一次账号密码后,下次点进登录页就自动填好,不用反复手动敲——这需要同时开启浏览器内自动填充开关、绑定系统级服务、保存首条凭证三步到位,缺一不可。 开启浏览器内的自动填充表单功能 这一步是触发自动填充的起点,不打开它,后面全白搭。 1、点击手机桌面的宙斯...
必须进入账号安全模块完成实名关联操作:先点【我的】→【设置】→【账号安全】,再选【手机号绑定】等任一入口,输入手机号、验证码,勾选协议后点击绑定即可成功。 想在“一起作业”APP里把手机号和账号正式绑定,确保后续能找回密码、接收作业提醒、参与班级互动,必须进入账号安全模块完成实名关联操作。 进入账号安全设置页 打开一起作业APP,点击右下角【我的】→点击页面顶部或中部的【设置】图标→在设置列表中找...
Back to top