在Java EE中,如何在代码中的任何位置使用变量而不将其作为参数传递?
类似于公共静态变量的东西......但是静态变量对于所有请求总是相同的......那么"静态变量"变量但是对于单个请求?
有可能吗?
这是一个小例子:
我有:
protected void doGet (...)
{
Model m = Model.GetById (...);
}
public class Model
{
private String descrition;
private Market market;
private List<SparePart> spareParts;
public Model GetById ()
{
Model m = new Model ();
// get info from db using the language
this.market = Market.GetById (...);
this.spareParts = SparePart.GetByModel (m);
}
}
public class SparePart
{
private String description;
public List<SparePart> GetByModel (Model mo)
{
// get info from db using the language
}
}
public class Market
{
private String descrition;
public Market GetById (...)
{
// get info from db using the language
}
}
对数据库进行查询并使用客户端语言检索信息...如何设置语言变量,以便我不必将其传递给使用它的方法?
anguage变量只是一个例子,它可能与其他变量一起发生
答案 0 :(得分:0)
您可以在ServletRequest
对象上设置和获取属性。
request.setAttribute("someName", someObject);
Object someObject = request.getAttribute("someName");
请参阅javadoc here。
或者,您可以使用CDI(或其他DI框架)并定义一个或多个@RequestScoped
对象,然后在您需要的位置@Inject
。{/ p>
答案 1 :(得分:0)
有十几种方法可以在JaveEE应用程序中通过执行流传递数据。假设您需要在一个应用程序边界内传递数据。
如果您需要在服务器之间共享数据,则可以在@Remote接口上公开业务方法,或者使用JMX共享/发布/使用。
具体选择应取决于您的App业务逻辑。
答案 2 :(得分:0)
虽然没有传递参数首先不是一个好主意,如果你必须&#39; MUST&#39;找到一个解决方案,如果它符合您的设计,那么使用内部类怎么样?这样您就可以将类变量声明为非静态变量,并且始终可以从内部类中访问它。