gpt4 book ai didi

jsf-2 - 使用 jsf session 作用域托管 bean 来表示静态分层数据

转载 作者:行者123 更新时间:2023-12-04 21:20:16 26 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center .




8年前关闭。




这可能是一种架构问题,但它仍然必须有“最佳实践解决方案”或公认的标准。

我指的是需要在网站上显示的某种静态数据,例如产品目录、菜单和菜单项列表、面包屑块列表等。我想在使用任何标准 CMS 时都可以使用此选项。

但我想对这个问题使用纯 JSF 解决方案。

所以,回到这个问题,我的阐述基于以下原则:

  • 数据不应在 facelets 中进行硬编码,因此我使用数据库来保存值,如下面的 db 脚本(在我的情况下为 MYSQL):
    CREATE TABLE CatalogueGroup (
    CatalogueGroupName VARCHAR(100) NOT NULL PRIMARY KEY,
    URLPath VARCHAR(200) NOT NULL,
    ParentGroupName VARCHAR(100) DEFAULT NULL,
    FOREIGN KEY (ParentGroupName) REFERENCES CatalogueGroup(CatalogueGroupName) ON UPDATE CASCADE ON DELETE SET NULL
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 然后我想使用要保存在 @ManagedBean 中的实体类并将其显示在 View 中,例如
    public class CatalogueGroup implements Serializable {
    private String catalogueGroupName;
    private List<CatalogueGroup> children = new ArrayList<CatalogueGroup>();
    private CatalogueGroup parentGroup;
    //other stuff of this bean
    }

    @ManagedBean
    @SessionScoped
    public class CatalogueBean implements Serializable {
    private CatalogueGroup catalogue;//loaded via CatalogueGroupDAO with condition parentGroup == null
    //other stuff of this bean
    }

    //snippet of xhtml view for a two-level catalogue
    <ul><h:outputText value="#{catalogueBean.catalogue.catalogueGroupName}" />
    <ui:rereat value="#{catalogueBean.catalogue.children}" var="group">
    <li><h:outputText value="#{group.catalogueGroupName}" /></li>
    </ui:repeat>
    </ul>

  • 上述设置有效,但感觉它很尴尬。
    因此,我想向 jsf 社区提出以下公开的“最佳实践”问题:
  • 像这样设置目录 bean 的正确方法是什么:
  • 一个 @SessionScope将加载一次并在每个 View 或
  • 上重新显示的 bean
  • 一个 @RequestScoped将在每个页面显示上访问数据库的 bean。
  • 有没有办法在 facelet View 中设置递归函数,或者我应该将目录嵌套级别限制为 2 或 3。
  • 我想显示某种修改后的目录,根据他的角色(添加到数据库表中的列)向登录用户公开更多组,并在没有用户登录时显示基本目录。此外,我想偶尔插入目录中的一些新组并不会强制用户重新登录,而是立即重新显示正确的数据:
  • 我是否应该在业务层过滤组并将过滤后的 CatalogueGroup 公开给 bean,或者我将加载整个目录并使用 render=false 限制其 subview ;
  • 在 session 期间公开整个目录是一种正确的方式吗?
  • 是否可以在将新数据库条目添加到服务器上所有当前事件的 CatalogueBean 时发送修改事件,以强制刷新其属性 (CatalogGroup) 或实现此功能我需要使用 @RequestScoped仅 bean ;
  • 如果使用请求范围的 bean 是唯一的选择,那么频繁地访问数据库以获取很少更改的数据或者有更聪明的做事方式是明智的;
  • 当用户登录(和注销)时,已经有一个 session 范围目录的实例,如何刷新它:我是否需要在 Action / Action 监听器中手动执行它,或者我需要使 session 无效或做一些更适合这种情况的事情.
  • 最佳答案

    您可以使用缓存来存储各种用户角色的菜单。然后,当您在数据库中插入新数据时使缓存无效(如果您从管理页面插入),或者您可以将缓存设置为在一段时间后过期(每天一次、每隔几小时等),然后您当缓存过期时再次读取数据。

    关于jsf-2 - 使用 jsf session 作用域托管 bean 来表示静态分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13358661/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com