java - 在 JSF 中实现项目编辑页面

标签 java jsf

我正在创建一个 JSF 应用程序。我有一些来自数据库的项目(例如产品),我想创建一个 JSF 页面来编辑特定项目,即:

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

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

我尝试了几种方法:

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

我仍然无法消除的问题是,如果在编辑某些项目属性后我尝试保存它们并且验证(例如 f:validateLength)失败,页面会重新加载但正在编辑的项目的 ID丢失了。我认为创建 Web 应用程序(例如用户版、商店产品版)时这是非常标准的任务,因此肯定应该有一些解决方案。

提前致谢。

最佳答案

相关信息:

参见 this answer有关允许在保留 ID 的同时进行编辑的示例代码(如果您使用的是 JSP 而不是 Facelets,该信息应该仍然适用)。参见 this answer了解您可能想使用的更多技术。参见 this answer用于在 URL 中保留参数的选项。


要解决您的问题,请创建一个请求范围的 bean 来执行以下操作:

//pseudo-stubs
//request scope: #{editor}
public class Editor {
  public Integer getId();
  public void setId(Integer id);
  public String save();
}

(您可以根据需要添加其他属性。)

当您通过 faces-config 中的注入(inject)导航到页面时,从请求参数填充 id:

<managed-bean>
  <managed-bean-name>editor</managed-bean-name>
  <managed-bean-class>foo.Editor</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
    <property-name>id</property-name>
    <property-class>java.lang.Integer</property-class>
    <value>#{param.id}</value> 
  </managed-property>
 //etc

使用隐藏域来保存id:

<h:inputHidden value="#{editor.id}" />
<h:commandLink action="#{editor.save}" value="save" />

任何时候提交表单,都会发送这个值;如果验证失败,隐藏字段仍将使用 id 值呈现。如果验证成功,editor bean 将在调用 save 之前使用 id 填充。

关于java - 在 JSF 中实现项目编辑页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1812580/

相关文章:

maven - Mock FacesContext 来测试我的面孔消息显示类

ajax - 如何通过 f :ajax when losing focus of second field? 验证两个密码字段

java - Javascript 和 Java 代码都可以包含在 WAR 覆盖中吗?

jsf - EL 中的 #{component} 到底是什么?

java - Eclipse 中的步进过滤器

java - Android - 语音解锁手机

java - h :commandButton action is just called one time on two calls

jsf - 为什么 JSF 会点击 xhtml 页面 3 次

java - bean 中的 Spring 构造函数注入(inject)。是 bean 了吗?

java - PDFBox 2 不创建 PDF/A 文件