我想知道以下场景是否有共同的模式。
假设我有一个由一个请求范围 bean 支持的 JSF 页面。当用户进入此页面时,我想从数据库表中获取所有数据行。同一个 JSF 页面包含一个提供查询条件的表单。当用户提供查询条件并提交表单时,我也想在同一页面上显示结果。
在页面入口处获取所有行的合适位置是 @PostConstruct 方法。这是一个很好的地方,因为额外的(注入的)请求参数已经在这里可用并且可以在查询中使用。但是,从表单提交的参数尚不可用。它们可以在 action 方法中访问。
如果用户使用表单条件查询数据库表,在这种情况下,数据库将被查询两次。将重新创建请求范围的 bean,并在表单操作方法获取用户想要的内容之前调用获取所有行的 @PostConstruct 方法。
当然,我可以将表单结果重定向到另一个 JSF 页面,该页面由不同的 bean 支持,仅在 action 方法中使用 DB 查询。但是有没有办法只获取一个 JSF 页面和一个托管 bean 所需的内容?