【发布时间】:2012-09-26 20:49:20
【问题描述】:
简而言之,如何在 webflow 视图 jsp 中使用 EL 获取完整的查询字符串?这就是我想要做的:
<span class="forgot-password">
<a href="forgotPasswordRequest?<%=request.getQueryString() %>">
<spring:message code="screen.welcome.link.forgotPassword" />
</a>
</span>
除了我想使用 EL 而不是 scriptlet <%=request.getQueryString() %>。使用${param.someParameterName} 获取任何单个参数似乎很容易,但我想要整个事情。更具体地说,我使用 CAS 作为 SSO 提供程序。为了进行身份验证,应用程序将使用包含参数service 的查询字符串将其登录重定向到CAS,该参数是成功身份验证后要返回的URL。像这样的:
?service=http%3A%2F%2Fmysite.com%3A9080%2Fwelcome
我的 CAS 登录页面有一个忘记密码 webflow 的链接。我需要将该服务参数传播到其他网络流。所以我可以这样做:
<span class="forgot-password">
<a href="forgotPasswordRequest?service=${param.service}">
<spring:message code="screen.welcome.link.forgotPassword" />
</a>
</span>
但是我失去了所有的 URL 转义。此外,如果将来我想保留其他参数,它们也会丢失。
scriptlet 目前可以工作,但它很难看,而且我不喜欢在我的演示文稿中包含代码(因为这是真正的 java 代码),即使它是微不足道的。 EL 无疑是一个更优雅的解决方案。
我查看了spring documentation 中列出的所有特殊 EL 变量,但仍然无法找到获取完整查询字符串的方法。
-------------------------------- 更新 ------------ ---------------------
好的,所以我正在做一些基础......原来ExternalContext 接口有一个getNativeRequest(),它是实际的HttpServletRequest 对象。从那里我可以得到完整的查询字符串:
externalContext.getNativeRequest().getQueryString()
所以现在我假设由于有一个名为 externalContext 的 特殊 EL 变量,我会这样做:
${externalContext.nativeRequest.queryString}
对吗?错误的!事实证明,externalContext 变量在 JSP 页面中不可用。有谁知道为什么?但是,还有flowRequestScope,它对JSP 可用并且有getExternalContext 方法,所以现在我可以这样做了:
${flowRequestScope.externalContext.nativeRequest.queryString}
酷,这行得通……但为什么有必要呢?为什么只有一些 特殊 EL 变量 被推送到 JSP 页面,为什么其中一些会发生变化(viewScope 似乎将其所有值都提升到了根级别,所以 viewScope.commandName在 JSP EL 中被引用为 ${commandName})?我一定遗漏了 WebFlow 工作方式中的一些基本内容。有人能指出我正确的方向吗?
【问题讨论】:
标签: java spring spring-mvc spring-webflow-2