我正在嘗試開發服務。JSF 2.0。無法在preRenderView事件處理程序中獲取POST參數和cookie
問題是我的index.xhtml應該從HTTP請求中獲取參數(POST和GET)和cookie。
我試着用<f:metadata>
和<f:event type="preRenderView">
這樣的組合:
<f:metadata>
<f:event type="preRenderView" listener="#{deConversation.start}"/>
</f:metadata>
代碼deConversation.start:
public void start(ComponentSystemEvent event) {
System.out.println("checkLogin");
HttpServletRequest request = SsoHelper.getRequest();
String requestSessId = SsoHelper.getRequestSessionId(request);
String requestRedirect = SsoHelper.getRequestRedirect(request);
System.out.println("sessId " + requestSessId);
if (requestRedirect == null || requestRedirect.isEmpty()) {
requestRedirect = "self";
}
if (requestSessId != null) {
trySessId(requestSessId, requestRedirect);
}
externalResourcesHandler.setExternalRedirect(requestRedirect);
tryToBeginConversation();
if (!isAuthorized()) {
SsoHelper.performNavigation("auth");
}
}
SsoHelper只是提供API這樣的:
public static String getRequestSessionId(HttpServletRequest request) {
Map<String, Object> cookieMap = FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();
String requestDeSessionId = null;
if (cookieMap.containsKey("de_session_id")) {
requestDeSessionId = ((Cookie) cookieMap.get("de_session_id")).getValue();
}
return requestDeSessionId;
}
public static String getRequestRedirect(HttpServletRequest request) {
return getRequestParam(request, "redirect", "self");
}
public static String getRequestExternalCss(HttpServletRequest request) {
return getRequestParam(request, "externalcss", null);
}
public static String getRequestParam(HttpServletRequest request, String name, String defaultValue) {
String[] paramValues = HttpServletRequestHelper.getParamValues(request, name);
String paramValue = null;
if (paramValues != null && paramValues.length != 0) {
paramValue = paramValues[0];
}
if(paramValue == null){
paramValue = defaultValue;
}
return paramValue;
}
public static HttpServletRequest getRequest() {
return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
}
public static void performNavigation(String destination) {
FacesContext context = FacesContext.getCurrentInstance();
ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
handler.performNavigation(destination);
}
點是我無法在m中獲得任何POST參數或cookie ethod start()。我只能獲取GET參數。
使用<f:event type="preRenderView">
有沒有可能讀取cookie和POST參數?
你可以這樣做[這種方式](http://stackoverflow.com/questions/550448/get-request-and-session-parameters-and-attributes-from-jsf-pages]但我認爲你應該考慮之前[一些建議](https://forums.oracle.com/forums/thread.jspa?threadID=2218557)。關心, –