简而言之,如何在 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 提供程序。为了进行身份验证,应用程序将使用包含参数的查询字符串将其登录重定向到 CAS,该参数service
是身份验证成功后要返回的 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 文档中列出的所有特殊 EL 变量,但仍然无法找到获取完整 queryString 的方法。
- - - - - - - - - - - - - - - - 更新 - - - - - - - - - ---------------
好的,所以我正在做一些基础......原来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 中被引用为 ${commandName}艾尔)?我一定遗漏了 WebFlow 工作方式中的一些基本内容。有人可以指出我正确的方向吗?