【问题标题】:Problem with JSF form submitJSF表单提交问题
【发布时间】:2010-07-27 06:13:53
【问题描述】:
public class MyBackingBean{

private List model;

public String search(){
  //change model data
  model = doSearch();
  return "same_view"
}

@PostConstruct
public void init(){
  model = loadDefault()
}

//Other code omitted for clarity
}

在 JSP 中,出于某些原因,我使用 c:foreach 来迭代模型并在 HTML 表格中显示项目。 jsp 页面有一个搜索按钮,其操作映射到 #{mybackingbean.search}。因此,当我单击搜索时,我希望在同一页面上仅显示一个子集(基于搜索参数)。我遇到的问题是,“当我单击搜索按钮时,将调用搜索方法并返回一个视图名称。由于 bean 是请求范围的,因此在此之后创建了一个新的 bean 实例,最终创建了 init 方法覆盖结果。意思是,我得到了相同的初始视图,它显示所有项目,而不是只显示匹配项目”。

这有什么问题?请指导我找到解决此问题的理想方法。

【问题讨论】:

    标签: java jsp jsf


    【解决方案1】:
    • 不要使用重定向,使用前进(在您的导航情况下)
    • 如果使用 JSF 2.0,请使用 @ViewScope
    • 查看 MyFaces Orchestra
    • 尝试来自 Richfaces 的 <a4j:keepAlive>

    【讨论】:

    • 如何修改我的导航案例以使用转发而不是重定向。能举个例子吗?
    • @user 只是一个建议 - 考虑将 JBoss Seam 与 JSF 结合使用,并将视图切换到 facelets 而不是 JSP。这是一个更好的组合。您可以在以后的项目中尝试一下。
    • @user:如果你有<redirect/>在导航的情况下,将使用重定向。去掉它。重定向将让客户端触发一个新的 GET 请求,该请求基本上会在调用提交方法后强制创建一个新的 bean 实例。前锋不会这样做。它将使用与调用提交方法后状态相同的 bean。您的症状表明您正在使用重定向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多