所有,
我在尝试访问会话映射时遇到以下问题:
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().put("userSession", session);
Run Code Online (Sandbox Code Playgroud)
我登录时看到此错误,然后等待几分钟,然后单击访问该bean的任何按钮.这是在超时之前(我已经设置了60分钟).有人可以帮忙吗?对我来说这是一个主要的表演限制......
java.lang.NullPointerException
at com.sun.faces.context.SessionMap.put(ExternalContextImpl.java:970)
at com.mounza.common.Util.logUser(Util.java:129)
at com.mounza.common.Util.userStart(Util.java:159)
at com.mounza.homepage.UserHomepageAction.<init>(UserHomepageAction.java:39)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:186)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:106)
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:368)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:230)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:69)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at com.sun.faces.application.ValueBindingValueExpressionAdapter.getValue(ValueBindingValueExpressionAdapter.java:113)
at org.ajax4jsf.taglib.html.facelets.KeepAliveHandler.apply(KeepAliveHandler.java:76)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
at com.sun.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:64)
at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:131)
at com.sun.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:337)
at com.sun.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:307)
at com.sun.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:68)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:119)
at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25) …Run Code Online (Sandbox Code Playgroud) 嗨我有一个像这样的代码:
<p:commandLink value="#{user.strUserid}" action="test.xhtml?faces-redirect=true"/>
Run Code Online (Sandbox Code Playgroud)
如何将参数传递给test.xhtml以获取所述页面中的值?我尝试使用<f:param>tag.But可以获取test.xhtml页面中的值.请建议.
我已经构建了一个位于菜单栏顶部的登录代码片段.如果用户在任何页面中通过导航并突然按下登录按钮,我会希望看到该人员经过身份验证并同时停留在他最初来自的页面上.所以我在支持bean上使用了这个:
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
Run Code Online (Sandbox Code Playgroud)
然后如果有说mypage.htm?a = 2&b = 2使用request.getQueryString()得到a = 2&b = 2
但getQueryString返回null,我怎样才能完全从支持bean获得原始URL?
我需要将URL中的java.util.Date从辅助bean传递给另一个Facelet(和bean).
任何人都可以告诉我这是否可能?我知道我无法在URL中传递复杂对象,但是这也包括Date吗?
或者我是否必须将插入日期(使用JSF标记<h:inputText>)转换为String,将其传递给URL然后将其转换回日期?
如果a f:viewParam为空,我会进行重定向(或错误)吗?
<f:metadata>
<f:viewParam name="accountId" value="#{accountMB.id}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
当我添加时required="true",没有任何反应.有什么选择?
我有一个JSF页面,由URL打开test.xhtml?a=15&b=20.
我有一个链接,应该将所有URL参数传递到下一页.
<h:link outcome="index" includeViewParams="true" value="Include all url parameters" />
Run Code Online (Sandbox Code Playgroud)
我期待当我点击链接时它会转到 index.xhtml?a=15&b=20
但我在URL中没有看到任何内容.我明白了includeViewParams吗?
用例是直接从超链接(Non-Faces-Request)调用JSF 2.x Backing Bean上的方法.做这个的最好方式是什么?
我想要做这样的事情:
链接:
http://localhost/show.xhtml?id=30&backingbeanname=loaddata&method=load
Run Code Online (Sandbox Code Playgroud)
支持豆:
@Named (value = "loaddata")
public class DataLoader {
public void load(int id){ ... }
}
Run Code Online (Sandbox Code Playgroud) 1)在JSF中使用get http变量是一个好习惯吗?似乎它试图避免这种情况.
2)这是我想要做的:在第一页上,我有一个链接列表,如果你点击链接,你有一个页面与其他链接等像树.我希望用户能够访问第三深度(例如)而无需从顶层开始(例如,通过带有get变量中相关对象ID的链接).
所以我的问题是:如何从托管bean设置get http变量?
为了得到它,这篇文章很清楚:获取http变量JSF
3)当然,如果您有其他解决方案,请随时分享.
PF 3.5.10,Mojarra 2.1.21,Omnifaces 1.5
如何在加载.xhtml JSF页面之前调用特殊的init() - 某些(CDI)SessionScoped bean的方法?现在我调用init(),如果用户从站点菜单中选择页面(带p:menutitem).但是如果用户使用浏览器地址行直接输入url该怎么办?
编辑my.xhtml::
<ui:define template="/mytemp.xhtml">
<f:event type="preRenderView" listener="#{mybean.init()}" />
<h:form>
<p:commandButton update="@form" ... />
</h:form>
</ui:define>
Run Code Online (Sandbox Code Playgroud)
如果我这样做,init()将在每次更新时调用(即每次回发到服务器),例如每次单击commandButton时.所以我不能使用你的提议.
编辑2:谢谢Luiggi Mendoza和BalusC!除了Luiggi Mendoza的解决方案之外,正如评论所述,Omnifaces 1.6也将拥有ViewScope.
让我们想象一下,我的JSF 2应用程序中有两个页面:第一页显示一个对象表(汽车或其他),另一个页面能够显示一个特定对象的详细信息.表页面位于请求范围内,因为每次用户请求时都应重新加载对象.详细信息页面在视图范围内.因此,当我单击表格内的对象时,该对象应显示在详细信息页面中.通过重定向,我可以转到详细信息页面,但详细信息页面为空,因为生成了新的vew.好吧,我可以将范围更改为会话但这会导致其他问题,所以我希望在视图范围内有详细信息页面.有没有办法将参数传递给新生成的视图范围bean?
更新1
这是第一次尝试使用视图参数的代码片段.评论说这不起作用.该值作为请求参数传递,但在目标页面中,该值为null.
表格页面:
<h:button value="Go to details" outcome="targetPage">
<f:param name="carId" value="This is a test" />
</h:button>
Run Code Online (Sandbox Code Playgroud)
详情页面:
<f:metadata>
<f:viewParam name="carId" value="#{bean.id}" />
<f:event type="preRenderView" listener="#{bean.loadData}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
豆的详细信息页面:
private String id;
public String getId() {
return id;
}
public void setId( String id ) {
this.id = id;
}
public void loadData() {
System.out.println( "Id: " + id );
}
Run Code Online (Sandbox Code Playgroud)
更新2
我发现了自己的错误.元数据部分位于模板文件中.当我将标签放入主文件的详细信息页面时,它可以工作.非常感谢你.
jsf ×8
jsf-2 ×4
jsf-2.2 ×2
viewparams ×2
cdi ×1
parameters ×1
primefaces ×1
redirect ×1
richfaces ×1
scope ×1
url ×1
view ×1