java – 在JSF中实现项目版本页面
我正在创建一个JSF应用程序.我有一些来自数据库的项目(例如产品),我想创建一个用于编辑特定项目的JSF页面,即:
>它应显示所选的项目属性并允许用户编辑它们, 我在存储/传递正在编辑的项目的ID时遇到问题.我在示例JSF CarDemo应用程序中看到它们存储正在会话中查看的项目(汽车).我不想这样做,因为我希望用户能够在单独的浏览器选项卡中编辑不同的元素. 我尝试了几种方法: >在URL中使用一些(例如itemId)GET参数,但是在编辑数据后很难返回项目页面(faces-config.xml中的to-view-id字段只能包含常量), 我仍然无法消除的问题是,如果在编辑了一些项目属性后我尝试保存它们并且验证(例如f:validateLength)失败,页面将被重新加载,但正在编辑的项目的ID将丢失.我认为在创建Web应用程序(例如用户版,商店产品版)时这是非常标准的任务,因此肯定应该有一些解决方案. 提前致谢. 解决方法
Tomahawk的
t:saveState 完全符合您的要求.只需在您的页面中添加类似内容:
<t:saveState value="#{bean.item.id}" /> 或者如果您想要涵盖所有“未覆盖”项目值: <t:saveState value="#{bean.item}" /> 如果您不想出于某些未知原因添加其他组件库(我确实建议使用Tomahawk,它会在标准JSF实现之上添加更多灵活组件,例如t:dataList,t:dataTable preserveDataModel =“true”,t: selectOneRadio layout =“spread”,t:inputFileUpload,etcetera),那么你也可以使用标准< h:inputHidden>用于将隐藏参数从请求传递到请求的组件(它呈现< input type =“hidden”>).需要注意的是,在验证阶段失败时,您仍然会丢失值.但是这可以通过使用组件绑定而不是值来实现. private HtmlInputHidden itemId = new HtmlInputHidden(); private Item item = new Item(); public void editItem() { // Action method when selecting an item for edit. itemId.setValue(item.getId()); } public void saveItem() { // Action method when saving edited item. item.setId((Integer) itemId.getValue()); } 并在JSF页面中具有以下相同的形式: <h:inputHidden binding="#{bean.itemId}" /> 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |