【发布时间】:2015-07-09 07:33:16
【问题描述】:
我想将托管会话 Bean 注入到 JSF 中的实体中。
我有一个要求,我需要根据用户在前端选择的区域设置显示不同的状态文本。 (国际化)对于一个状态 ID,我有 4 个状态文本,即 StatusText、StatusTextLang1、StatusTextLang2、StatusTextLang3。
为了支持此功能,我正在更改 StatusText 属性的 getter 方法。在这里,我想从 SessionBean 中获取语言环境。因为它是一个实体,所以我得到一个空 sessionBean。
@Entity
@Table(name="Projektstati")
public class Projektstati implements Serializable{
@ManagedProperty("#{sessionBean}")
private SessionBean sessionBean;
public void setSessionBean(SessionBean sessionBean){this.sessionBean = sessionBean;}
【问题讨论】:
-
在我看来,您正在尝试使用实体中的代码解决视图问题——这是非常非常糟糕的设计。为什么不向 SessionBean 本身添加一个方法来获取正确的文本?
-
同意你的观点,问题是如果我这样做,我最终会做出巨大的改变。我有 11 个这样的实体和大约 60 个使用这些列的屏幕。还有什么可以解决的? @gimby
-
你在这里没有向我描述问题。 11 个实体和 60 个屏幕什么都不是。
-
好的,问题是我已经有 60 个页面在使用该字段的地方(直接在填充时)。现在,如果我要在 SessionBean 中进行更改,那么我将不得不在所有 60 个页面中进行更改。而如果我更新这个字段的 getter 方法的代码,所有的出现都会自动生效。我得到的唯一问题是我无法将 sessionBean 注入实体,因此我可以确定从前端选择了哪种语言。 @gimby
标签: jsf jsf-2 localization entity managed-property