【问题标题】:Jsf pages don't show newly added valuesJsf页面不显示新添加的值
【发布时间】:2010-07-14 07:07:52
【问题描述】:

我正在使用 Java EE6 和 JSF 来制作一个简单的 CRUD 应用程序。

在我的许多 JSF 页面中,我都有一个 selectOneMenu 供用户选择现有项目。例如,如果用户正在添加“考试”,他/她可以从组合框中选择“部门”,因为它们是一对多的关系。

问题在于,无论何时添加新部门,组合框值都不会更新,直到会话超时。我需要使用 SessionScoped 支持 bean,因为我需要这些值在多个请求中保持不变。

这是我用来填充 selectOneMenu 的函数(与上述示例不完全相同,但非常相似):

public SelectItem[] getExamsByDepartment(){
        if(departmentMaster!=null){
            Collection<ExamMaster> examMasterCollection = departmentMaster.getExamMasterCollection();
            //Problem: newly added exams aren't shown until session is re-created
            if (examMasterCollection != null && examMasterCollection.size() > 0) {
                SelectItem[] selectItem = new SelectItem[examMasterCollection.size()];
                Iterator<ExamMaster> i = examMasterCollection.iterator();
                int count = 0;
                while (i.hasNext()) {
                    ExamMaster tmpExamMaster = i.next();
                    selectItem[count++] = new SelectItem(tmpExamMaster, tmpExamMaster.getExamName());
                }
                return selectItem;
            }
        }
        SelectItem[] selectItem = new SelectItem[1];
        selectItem[0] = new SelectItem("", "[No exams found]");
        return selectItem;        
    }

是否有任何解决方法可以销毁并重新创建会话?或者有什么其他方法可以解决这个问题?

编辑:我想问题归结为为什么 Collection 在插入记录后不更新,即使在 Persistence 类中定义了一对多关系

编辑 2:我现在使用的是命名查询,而不是使用集合,它会按预期获取新记录。我曾假设 Collection 应该自动更新。也许这不是真的?

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    一般来说,在这些情况下使用会话范围的 bean 并不是一个好主意。制作你的豆子@ViewScoped

    此外,每当您添加项目时,请重新获取该集合。 (这将涵盖同一用户添加然后读取集合的情况)

    【讨论】:

    • 感谢您提供有关 ViewScope 的提示。至于Collection,我每次都取,但没有新记录。
    【解决方案2】:

    编辑 2:而不是使用 集合,我正在使用命名查询 现在,它将新记录获取为 预期的。我曾假设 集合应该更新 自动地。也许那不是 真的吗?

    对象的集合仅在重新同步到数据库时才会更新。如果您没有明确地重新同步到数据库,它就不会更新。

    会话中的对象将拥有其值的副本,并且不需要返回数据库,除非有实际告诉它这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多