实际上是否可以在JSF中的托管组件之间传递任何数据?如果是的话,如何实现这一目标?
有人可以提供任何样品吗?
在我看来,@ApplicationScoped只有在第一次使用EL访问页面时才启动bean.
当我查询时ApplicationMap,是否@ApplicationScoped会创建bean?
ExternalContext ec = currentInstance.getExternalContext(); result =
ec.getApplicationMap().get(beanName);
Run Code Online (Sandbox Code Playgroud)
如何在加载XHTML页面之前触发应用程序作用域bean的实例化?
我想访问Servlet中的视图范围托管bean.
我搜索了类似的问题,得到了这些问题:
如何从视图范围中获取bean,它FacesContext.getCurrentInstance()在Servlet中不适用,因为它应该给出null结果
JSF - 按名称获取托管bean,它处理所有其他范围但不处理viewcope
我会认为这是不可能的,不是吗?
有一个简单的解决方案可以将bean范围更改为会话范围,但这是最后的机会,因为我担心内存消耗.
我最后需要的是:managebean包含dataTable中显示的一些数据.同一页面应包括这些数据的图表表示的图像(强制性).图像可以由Servlet生成,但它需要访问数据或从db重新加载它们.
我也试过<p:graphicImage>PrimeFaces 2.X,但它与viewscope bean不兼容.有什么建议吗?
是否可以在before-invokeApplication-phaselistener中获取对待执行的managedbean的引用?
在调用应用程序阶段之前,应该清楚要执行该方法的managedBean.
为了举例,假设有一个主要的管理bean来处理1个jsf页面.
所以我需要的基本上是:
为了实现第2点,我想要拦截其中一个阶段
我已经检查了关于在阶段实现中获取托管bean的API文档,但我似乎无法找到任何.
在输入这个问题后,我意识到我可以在@PostConstruct或托管bean的构造函数中执行此操作,但这只会在第一次构造bean时执行,并且我需要每次从访问jsf时调用该方法菜单.
有什么建议 ?
此致,
Albert Kam
我正在运行一个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.
我最终做的是使用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)
这不是我的想法,但它是一种解决方法.
由于这个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(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项目中执行此操作的最佳方法是什么?
你能告诉我你对此的看法吗?
我正在尝试创建一个本地化的 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 不可用,有人可以确认吗?
如果这是真的,我想在选择另一种语言后立即翻译我的应用程序。
我认为我需要提及一件事 - 语言下拉列表不是我的应用程序的一部分。它是包含多个应用程序的某种框架的一部分(如门户)。
下面的代码片段就是我正在使用的内容.
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工作?
jsf ×8
jsf-2 ×4
servlets ×3
java ×2
cookies ×1
java-ee ×1
localization ×1
managed ×1
requestscope ×1
view-scope ×1