加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在JSF中实现项目版本页面

发布时间:2020-12-15 08:31:29 所属栏目:Java 来源:网络整理
导读:我正在创建一个JSF应用程序.我有一些来自数据库的项目(例如产品),我想创建一个用于编辑特定项目的JSF页面,即: 它应显示所选的项目属性并允许用户编辑它们, 我希望能够通过一些链接查看此项目, 我希望JSF以某种方式记住我正在编辑特定项目(例如,在编辑其数据
我正在创建一个JSF应用程序.我有一些来自数据库的项目(例如产品),我想创建一个用于编辑特定项目的JSF页面,即:

>它应显示所选的项目属性并允许用户编辑它们,
>我希望能够通过一些链接查看此项目,
>我希望JSF以某种方式记住我正在编辑特定项目(例如,在编辑其数据后,它应显示此项目页面)

我在存储/传递正在编辑的项目的ID时遇到问题.我在示例JSF CarDemo应用程序中看到它们存储正在会话中查看的项目(汽车).我不想这样做,因为我希望用户能够在单独的浏览器选项卡中编辑不同的元素.

我尝试了几种方法:

>在URL中使用一些(例如itemId)GET参数,但是在编辑数据后很难返回项目页面(faces-config.xml中的to-view-id字段只能包含常量),
>使用一些支持bean托管属性并在每个超链接和表单中传递其值(通过添加隐藏字段)

我仍然无法消除的问题是,如果在编辑了一些项目属性后我尝试保存它们并且验证(例如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}" />

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读