- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试开发一项服务。
重点是我的 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);
}
重点是我无法在方法 start() 中获取任何 POST 参数或 cookie。我只能获取 GET 参数。
是否可以使用 <f:event type="preRenderView">
读取 cookie 和 POST 参数? ?
最佳答案
我认为您应该使用 @PostConstruct 调用 init 方法,以便在页面呈现之前调用 init() 并采用全局变量为变量分配 Session 或 Cookies 值,从而实现您的要求。
例子:
@PostConstruct
public void init(){
// Your Response
Map request = (Map)FacesContext.getCurrentInstance().getExternalContext().getResponse();
request.get("Your Key");
// Cookies
Map cookie = FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();
cookie.get("Your Key");
Map session = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
session.get("Your Key");
}
试试这个,我认为它会对你有帮助。
关于java - JSF 2.0。无法在 preRenderView 事件处理程序中获取 POST 参数和 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13271113/
我有一个带有“显示更多结果”按钮的搜索结果页面。支持 bean 是 session 范围的,我们使用 preRenderView 在支持 bean 中执行搜索方法: “显示更多结果”按钮的定义如下:
我对 f:event type="preRenderView" 的执行顺序和次数有疑问. 在我在这里的搜索过程中,我在 this 中找到了 BalusC 的常规答案。和 this与我的问题相关的帖子
我的一个页面/bean 有它的 preRenderView事件在第一页加载时触发两次,然后 2 + n每次回发的次数,其中 n是已发生的回发数(包括当前回发数)。 在这里阅读了一些其他帖子后,我搬家了
我从 What can , and be used for? 开始 我有一个预渲染 View 事件监听器: 它调用以下方法: public String performWeakLog
与使用 viewAction 相比,什么时候应该使用 preRenderView 事件来初始化页面的数据?它们在使用上是否相同并且它们具有相同的效果? preRenderView 事件 或者
我的 Mojarra 2.1.6 Web 应用程序有问题,我正在使用 @ViewScoped 开发它托管 bean,每个 bean 都附加到一个 xhtml 页面。此页面正在接收一些 View 参数,
有没有办法用 ajax 更新 preRenderView 组件? 一些例子: // some code here
我有以下片段: Simple JSF Facelets page Hello, Place your content here 当我打开页面时,Workf
什么时候应该使用 f:viewAction 或 preRenderView 事件来初始化页面数据,而不是使用 @PostConstruct 注释?是否根据支持 bean 的范围类型使用其中一种或另一种
我正在使用 f:metadata 元素中的预渲染 View 事件从另一个页面调用页面。 如果我使用 导航到页面它工作并调用监听器方法。 但是,如果我使用属于调用页面的托管 bean 的操作方法的结果
我正在用 jsf 2.0 做一个页面,我想做这样的事情: ....(Some code).... #{var.something} 方法 initPage(id)
进行回发时是否可以“禁用”触发此操作? 最佳答案 是不可能的。需要手动查看 FacesContext#isPostback() 在监听器方法内。 public void init()
我的 jsf xhtml 页面中有以下内容: 我需要在 preRenderView 执行后显示模态对话框。而且
我正在尝试使用动态验证组 然而,#{bean.validationGroup} 总是在 之前被调用 这是 Myfaces 中的错误吗?我需要在 prerenderview 之后
Mojarra-2.1.3 按照 Glassfish3.1.1(与 Netbeans7.1 一起分发) 我有一个 @SessionScoped 支持 bean 跟踪器,带有一个监听器 void res
我在 处遇到了一些麻烦导致我的所有按钮(默认类型,而不是 type="button"> 调用相同的 bean 方法,特别是 decryptionBean.readAllBoards 。以下是我认为代
我正在尝试使用 检查每个 View 的身份验证 标签。 该机制有效,但外观已损坏,似乎缺少一些 CSS。当我取消选中时,我的页面会正常显示。 这是我的一个观点,其中检查身份验证: ...
我正在尝试开发一项服务。 重点是我的 index.xhtml 应该从 HTTP 请求中获取参数(POST 和 GET)和 cookie。 我尝试与 结合使用和 像这样: deCon
所以我们有一个 f:event: 在初始页面加载(渲染)时根据需要触发。 然而,这个 preRenderView 事件也由 ajax 部分页面渲染触发,它重新渲染一个带有 i
我是一名优秀的程序员,十分优秀!