성공적으로 로그인 한 후 내 JSF 응용 프로그램에서 Logout
링크가있는 응용 프로그램의 내 홈 페이지로 이동합니다.tr : commandLink 작업 메서드가 다음 페이지로 이동하지 않습니다. 대신 같은 페이지를 다시로드합니다.
다음은 로그 아웃 링크와 관련된 html입니다.
<div id="top_white">
<div style="float: right"><tr:form><tr:commandLink id="logout" action="#{Controller.Logout}"><img alt="logout" src="../../images/logout.gif"/></tr:commandLink></tr:form></div>
</div>
그리고 여기에 내가 세션에서 사용자 ID를 확인하고 사용자에게 특정 목록을로드 생성자에서 sessionscoped
public class Controller {
private static Logger LOGGER = Logger.getLogger(Controller.class);
public Controller() {
req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
session = req.getSession(false);
String userid = session.getAttribute("userid").toString();
if(List == null){
List = new ArrayList<List>();
List = new DAO().loadListByid(Long.valueOf(userid));
LOGGER.debug("successfully loaded the list for the user");
}
}
private long Username;
private String Password=null;
HttpServletRequest req;
HttpSession session;
private List<List> List=null;
// getter and setters
public String Logout(){
session.invalidate();
LOGGER.debug("In LogOut");
return "loggedout";
}
}
내 Controller
이다.
나는 또한 session.If 각 일부 ID를 확인하는 ServletFilter
가가의 ID를 검사하는 그래서 /faces/jsp/*
에 JSP 폴더에있는 모든 JSP 년대에 그 매핑되는 InvalidUser page.My 필터로 리디렉션을 찾을 수없는이 세션. 여기
PhaseListener
을 추가 내 필터
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
LOGGER.debug("In doFilter");
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
LOGGER.debug("request:" + request.getRequestURL().toString());
try{
if (session.getAttribute("id") != null) {
LOGGER.debug("id found:" + session.getAttribute("id"));
chain.doFilter(req, res); // id found, so just continue request.
}
}catch(NullPointerException e){
LOGGER.debug("No id found Exception: ", e);
response.sendRedirect(properties.getProperty(INVALID_USER_REDIRECTURL, true)); // No id found, so redirect to Invalid user page.
}
}
의 doFilter
방법이다. 페이지 처음 stuff.So의 어떤 양식 제출 형식이 없기 때문에 내가 위의 로그가 예상대로
["http-bio-8090"-exec-114] DEBUG SessionFilter - In doFilter
["http-bio-8090"-exec-114] DEBUG SessionFilter - request:http://my homepageurl
["http-bio-8090"-exec-114] DEBUG SessionFilter - id found
["http-bio-8090"-exec-114] ERROR org.apache.myfaces.config.FacesConfigurator - Configuration objects do not support clean-up. Update aborted
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE RESTORE_VIEW(1)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE RESTORE_VIEW(1)
["http-bio-8090"-exec-114] DEBUG org.apache.myfaces.lifecycle.LifecycleImpl - exiting from lifecycle.execute in RESTORE_VIEW(1) because getRenderResponse is true from one of the after listeners
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE RENDER_RESPONSE(6)
["http-bio-8090"-exec-114] INFO org.apache.myfaces.config.annotation.DefaultLifecycleProviderFactory - Using LifecycleProvider org.apache.myfaces.config.annotation.AllAnnotationLifecycleProvider
["http-bio-8090"-exec-114] DEBUG Controller - id found in controller
["http-bio-8090"-exec-114] DEBUG DAOProperties - dao.properties loaded successfully
["http-bio-8090"-exec-114] DEBUG SvrConnection - In JNDI
["http-bio-8090"-exec-114] DEBUG DAO - Successfully connected to database
["http-bio-8090"-exec-114] DEBUG DAO - connection closed
["http-bio-8090"-exec-114] DEBUG Controller - successfully loaded the list for the user
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE RENDER_RESPONSE(6)
JSF 라이프 사이클의 첫 번째와 마지막 단계로 다음과 같은 서버 로그를 참조로드
만 첫 단계와 마지막 단계가 나열됩니다.그러나이 게시물의 맨 위에서 언급 한 Logout
commandLink를 클릭하면 실제 문제가 발생합니다.
Logout
링크를 클릭하면 여기에 서버 로그가 표시됩니다. 내 액션 메소드가 INVOKE_APPLICATION
에 호출되고 내 컨트롤러의 Logout()
메소드가 호출되고 세션이 무효화되고 문자열 loggedout
가 반환됩니다 예상대로 위의 로그에서
["http-bio-8090"-exec-114] DEBUG SessionFilter - In doFilter
["http-bio-8090"-exec-114] DEBUG SessionFilter - request:http://my homepage url
["http-bio-8090"-exec-114] DEBUG SessionFilter - appid found
["http-bio-8090"-exec-114] ERROR org.apache.myfaces.config.FacesConfigurator - Configuration objects do not support clean-up. Update aborted
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE RESTORE_VIEW(1)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE RESTORE_VIEW(1)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE APPLY_REQUEST_VALUES(2)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE APPLY_REQUEST_VALUES(2)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE PROCESS_VALIDATIONS(3)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE PROCESS_VALIDATIONS(3)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE UPDATE_MODEL_VALUES(4)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE UPDATE_MODEL_VALUES(4)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE INVOKE_APPLICATION(5)
["http-bio-8090"-exec-114] DEBUG Controller - In LogOut
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE INVOKE_APPLICATION(5)
["http-bio-8090"-exec-114] DEBUG org.apache.myfaces.lifecycle.LifecycleImpl - exiting from lifecycle.execute in INVOKE_APPLICATION(5) because getRenderResponse is true from one of the after listeners
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - START PHASE RENDER_RESPONSE(6)
["http-bio-8090"-exec-114] DEBUG LifeCycleListener - END PHASE RENDER_RESPONSE(6)
["http-bio-8090"-exec-116] DEBUG SessionFilter - In doFilter
["http-bio-8090"-exec-116] DEBUG SessionFilter - request:http://my homepage url
["http-bio-8090"-exec-116] DEBUG SessionFilter - No id found Exception:
java.lang.NullPointerException
.
은 내가 faces-config.xml
<navigation-rule>
<from-view-id>/jsp/Services.jsp</from-view-id>
<navigation-case>
<from-outcome>loggedout</from-outcome>
<to-view-id>/others/Logout.jsp</to-view-id>
</navigation-case>
</navigation-rule>
에서 다음 탐색 규칙이 그러나이 navigation-rule
은 실행되지 않습니다. 대신에 RENDER_RESPONSE
단계에서 동일한 홈 페이지 URL을 다시로드하려고 시도합니다. 분명히 NullPointerException
을 던지는 세션에 id
이 없습니다.
위의 각 폴더에 jsp가 있습니다. JSF 1.2 및 myFaces 1.2.9를 사용하고 있습니다.
1) 탐색 케이스가 실행되지 않는 이유는 무엇입니까?
2) 다시 내 홈페이지 URL을 다시로드하는 이유는 무엇입니까?
누군가의 도움을주십시오.
안녕하세요. Sreeram! 고정 된 것에 대해 좀 더 자세하게 설명해 주실 수 있습니까? Tomcat에 재배포 한 후 "JSF 프로젝트에서"org.apache.myfaces.config.FacesConfigurator - 구성 객체가 정리를 지원하지 않습니다. 업데이트가 중단되었습니다. "라는 오류 메시지가 나타납니다. 최악의 경우는 어떤 종류의 무작위적인 것입니다. 때로는 때로는 제대로 작동합니다. –