prettyfaces和jsf:使用filter在action类中获取null值

时间:2013-04-26 05:20:14

标签: jsf-2 servlet-filters prettyfaces

你好我正在使用prettyfaces jsf2.0 我创建了一个过滤器,它检查用户是否登录的每个请求

@WebFilter(urlPatterns= {"*.xhtml"} , dispatcherTypes = {DispatcherType.REQUEST})
public class Authentication implements Filter {

@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("[Authentication Filter] : init Method");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws         IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
PrettyContext context = PrettyContext.getCurrentInstance(request);      
if (!(context.getCurrentMapping().getId().equals("login")) && (session == null ||     session.getAttribute("username") == null)) {
{
response.sendRedirect(request.getContextPath()+"/login");
}
else {
chain.doFilter(req, res); // Logged-in user found, so just continue request.
}
@Override
public void destroy() {}
}

当我启动tomcat服务器时,它会加载login.xhtml页面 URL显示在地址栏中// localhost:8080 / MyApp / login 在login.xhtml中,我的表单包含用户名和密码字段

当我使用

提交表单时
<p:commandButton ajax="false" value="Login" action="pretty:loggedin" />

当我在action类中获取值时,那里的值为null 当我在过滤器中打印system.out.println loggin时,它看起来像两个URL正在请求 1. /登录 2. / loggedin 那些y值在那里变为空。 任何解决方案请提前致谢。

1 个答案:

答案 0 :(得分:1)

你正在做的事情看起来不正确。您在登录命令按钮中使用pretty:loggedin作为操作属性。这不会执行任何操作方法,而是重定向到其他映射,而没有任何机会处理用户输入的值。

您应该在action属性中引用一个方法,用于处理登录尝试。如果成功,则此方法应返回pretty:loggedin,这会将用户重定向到新页面。

我希望这会有所帮助。如果你有更多问题,你应该在PrettyFaces论坛上发帖。如果解决问题需要多个问题/响应周期,那么这是一个更好的帮助你的地方。 :)

http://ocpsoft.org/support/