相关疑难解决方法(0)

在JSF中的托管组件之间传递数据

实际上是否可以在JSF中的托管组件之间传递任何数据?如果是的话,如何实现这一目标?

有人可以提供任何样品吗?

java jsf

6
推荐指数
1
解决办法
1万
查看次数

JSF2 ApplicationScope bean实例化时间?

在我看来,@ApplicationScoped只有在第一次使用EL访问页面时才启动bean.

当我查询时ApplicationMap,是否@ApplicationScoped会创建bean?

ExternalContext ec = currentInstance.getExternalContext(); result =
    ec.getApplicationMap().get(beanName);
Run Code Online (Sandbox Code Playgroud)

如何在加载XHTML页面之前触发应用程序作用域bean的实例化?

java jsf jsf-2

6
推荐指数
1
解决办法
1897
查看次数

如何从Servlets访问@ViewScoped托管bean?

我想访问Servlet中的视图范围托管bean.

我搜索了类似的问题,得到了这些问题:

如何从视图范围中获取bean,FacesContext.getCurrentInstance()在Servlet中不适用,因为它应该给出null结果

JSF - 按名称获取托管bean,它处理所有其他范围但不处理viewcope

我会认为这是不可能的,不是吗?

有一个简单的解决方案可以将bean范围更改为会话范围,但这是最后的机会,因为我担心内存消耗.

我最后需要的是:managebean包含dataTable中显示的一些数据.同一页面应包括这些数据的图表表示的图像(强制性).图像可以由Servlet生成,但它需要访问数据或从db重新加载它们.

我也试过<p:graphicImage>PrimeFaces 2.X,但它与viewscope bean不兼容.有什么建议吗?

jsf servlets view-scope

6
推荐指数
1
解决办法
1599
查看次数

JSF 2:在阶段监听器对象中访问托管bean的实例?

是否可以在before-invokeApplication-phaselistener中获取对待执行的managedbean的引用?

在调用应用程序阶段之前,应该清楚要执行该方法的managedBean.

为了举例,假设有一个主要的管理bean来处理1个jsf页面.

所以我需要的基本上是:

  1. 用户从菜单访问该程序
  2. 因为它是从菜单访问的,所以调用主管理bean的init()方法来初始化诸如准备数据,进行授权检查之类的东西
  3. 后续提交不再需要再调用init()方法,直到从菜单中重新启动它

为了实现第2点,我想要拦截其中一个阶段

我已经检查了关于在阶段实现中获取托管bean的API文档,但我似乎无法找到任何.

在输入这个问题后,我意识到我可以在@PostConstruct或托管bean的构造函数中执行此操作,但这只会在第一次构造bean时执行,并且我需要每次从访问jsf时调用该方法菜单.

有什么建议 ?

此致,
Albert Kam

jsf jsf-2

5
推荐指数
1
解决办法
1万
查看次数

如何从HttpSessionListener访问JSF应用程序范围的托管bean?

我正在运行一个JSF应用程序并声明了一些应用程序范围的后台bean(在common-beans.xml中或使用 @ManagedBean@ApplicationScoped 注释).

如何从内部访问这些bean javax.servlet.http.HttpSessionListener

我知道 FacesContext 会话监听器中没有这个,所以使用:

public class AnHTTPSessionListener implements HttpSessionListener {
    ...
    public void sessionDestroyed(HttpSessionEvent e) {
        AppBean appBean = (AppBean) FacesContext.getCurrentInstance()
                                                .getExternalContext()
                                                .getApplicationMap().get("appBean")
       ...
    }
Run Code Online (Sandbox Code Playgroud)

...按预期抛出NPE.

更新:

(在BalusC回答之前)

我最终做的是使用env-entry元素(而不是使用应用程序范围的bean)声明我需要在web.xml中访问的应用程序范围的信息,然后使用以下命令检索该信息:

   InitialContext ic = new InitialContext();
   Context env = (Context) ic.lookup("java:comp/env");
   appName = (String) env.lookup("appBeanValue");
Run Code Online (Sandbox Code Playgroud)

这不是我的想法,但它是一种解决方法.

jsf

5
推荐指数
1
解决办法
7254
查看次数

在另一个托管bean中获取托管bean引用

由于这个BalusC帖子,我尝试在另一个托管bean中获取托管bean的实例:这里

使用findBean方法,它很棒,我检索我的bean,但ManagedProperty我无法得到我的bean.

我要注入的bean是这个:

@ManagedBean(name="locale")
@SessionScoped
public class LocaleBean {

   private String locale;

   public String getLocale() {              
        return locale;
   }

   public void setLocale(String locale) {
        FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(locale));      
        this.locale = locale;
   }

}
Run Code Online (Sandbox Code Playgroud)

所以,当我打电话给LocaleBean locale = findBean("locale");我的loginbean时,它的工作原理是:

@ManagedProperty("#{locale}") // OR localeBean, LocaleBean...
private LocaleBean locale;
Run Code Online (Sandbox Code Playgroud)

不起作用......

com.sun.faces.mgbean.ManagedBeanCreationException:Impossibledecréerlebeangéré«login».Lesproplèmessuivantsontétédétectés: - Lapropriété«locale»dubeangéré«login»n'existe pas.

告诉我为什么 ?

jsf managed java-ee jsf-2

5
推荐指数
1
解决办法
4638
查看次数

在servlet中访问FacesContext

我正在研究JSF(v1.2)应用程序.在我的应用程序中,我需要一个可以为任何资源(PDF,图像,Excel等)提供服务的通用servlet.我的想法是让调用者发送所需的信息,以便我可以使用一些配置找出正确的委托者类.

此委托者类将负责提供正确的资源.

例如,这是请求网址

http://example.com/servlet?delegatorid=abcd
Run Code Online (Sandbox Code Playgroud)

我的Servlet代码是这样的.

protected void doGet(HttpServletRequest request, HttpServletResponse response){
 String delegatorID=request.getParameter("delegatorid");
//Get the configuration from Configuration table
configuration=getConfiguration(delegatorID);
//invoke the method of the delegator class based on this configuration
Object result=invokeMethod(configuration);
//write the response to the stream
}
Run Code Online (Sandbox Code Playgroud)

我的问题是在JSF项目中执行此操作的最佳方法是什么?

  1. 我应该在这个操作中完全避免JSF依赖吗?我可以找到委托方法和类,并使用反射调用它.如果我避免JSF依赖,将来是否会有任何潜在的限制.[我可以考虑的一个问题是,在其中一个代码中,我需要从会话中获取用户信息.我是通过FacesContext这样做的.由于FacesContext不可用,它将失败,我应该有另一个选项来获取会话.
  2. 如果我必须介绍JSF依赖项,我如何在这里获取FacesContext?据我所知,这里只能访问存储在应用程序范围内的bean.我不想那样做.有没有其他方式得到它?
  3. 我可以通过直接使用URL调用ManagedBean方法来代替使用servlet吗?这将给我FacesContext.我想我需要有一个虚拟JSP页面来调用托管bean方法.

你能告诉我你对此的看法吗?

jsf servlets

3
推荐指数
1
解决办法
5773
查看次数

Web 过滤器中设置的 Cookie 在请求 bean 中不可用

我正在尝试创建一个本地化的 JSF Web 应用程序,它允许用户通过下拉菜单选择一种语言。选择语言后,我模拟重定向到同一页面,但带有 URL 参数:

window.location.replace(urlToMyApp + '?locale=DE');
Run Code Online (Sandbox Code Playgroud)

接下来,我在应用程序的 Web 过滤器中读取“locale”参数并将其写入同名的 cookie 中:

String localeValue = httpRequest.getParameter("locale");
Cookie cookie = new Cookie("locale", localeValue);
cookie.setMaxAge(-1);
cookie.setDomain(cookieDomain);
cookie.setPath(cookiePath);
httpResponse.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试在请求 bean init 方法中读取该 cookie 时,cookie 不可用。如果我通过下拉菜单(例如 EN)选择另一种语言,则在 init 方法中读取先前选择的语言 (DE)。

我假设在下一个“请求 - 响应”周期之前写入过滤器的 cookie 不可用,有人可以确认吗?

如果这是真的,我想在选择另一种语言后立即翻译我的应用程序。

我认为我需要提及一件事 - 语言下拉列表不是我的应用程序的一部分。它是包含多个应用程序的某种框架的一部分(如门户)。

cookies jsf localization servlet-filters requestscope

3
推荐指数
1
解决办法
70
查看次数

如何从servlet获取JSF2.0 sessionMap引用

下面的代码片段就是我正在使用的内容.

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
  Map<String, Object> sessionMap = externalContext.getSessionMap();
  sessionMap.put("User",user);
Run Code Online (Sandbox Code Playgroud)

现在我怎么能从普通的"servlet"获得"sessionMap" - "key"值?这样的代码是否(User)session.getAttribute("User");可以通过我的servlet工作?

servlets jsf-2

1
推荐指数
1
解决办法
2749
查看次数