- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 s:url
标签和 scheme
属性构建一些 URL,其值根据某些条件动态变化(例如,将构建相同的 URL一些请求使用 http
,另一些请求使用 https
)。对于给定的请求,应用程序中的所有 s:url
都将使用 http
或 https
构建。
我已经为这个标准编写了逻辑并将要使用的模式(http
或 https
)存储为我的 Action 中的字符串字段,但似乎我不能'在 s:url
标签的 scheme
属性中使用表达式:
当我尝试使用以此构建的 URL 呈现 HTML anchor 时:
<s:url scheme="%{myScheme}" id="myUrl" action="MyAction" includeParams="none">
<s:param name="someParam" value="blah"/>
</s:url>
<s:a href="%{myUrl}">click me</s:a>
我得到:
<a href="%{myScheme}://myhost.com/mywebapp/MyAction.action?someParam=blah">click me</a>
还尝试做一件丑陋的事情,即使不使用实际的操作属性(如果可行,我会更改实际值的文字)。尝试使用脚本:
<s:url scheme="<%= "https" %>" id="myUrl" action="MyAction" includeParams="none">
<s:param name="someParam" value="blah"/>
</s:url>
但出现了 500
错误和此日志消息:
org.apache.jasper.JasperException: /path/to/my/file.jsp(123,456) According to TLD or attribute directive in tag file, attribute scheme does not accept any expressions
我还尝试了以下丑陋的选项,但没有用:
<s:url scheme="<s:property value="myScheme"/>" id="myUrl" action="MyAction" includeParams="none">
<s:param name="someParam" value="blah"/>
</s:url>
和:
<s:url scheme="<c:out value="${myScheme}"/>" id="myUrl" action="MyAction" includeParams="none">
<s:param name="someParam" value="blah"/>
</s:url>
所以我没有想法了。有人遇到过同样的问题吗?问题的其余部分解释了为什么我需要这样做:
我的应用程序位于接收 HTTPS 请求的负载平衡器之后,但使用 HTTP 将它们转发到应用程序服务器,然后使用 HTTPS 将响应发送回互联网。因此,应用程序服务器始终接收 HTTP
流量。
当通过负载均衡器请求时,应用程序中的链接必须使用 https 方案生成(这样互联网上的用户将得到保护),当直接请求时使用 http(当我们开发人员需要访问我们内部的特定前端时)内部网络)。我无法控制服务器配置,也无法对系统管理员施加太大影响,因此更改服务器或网络配置似乎很成问题。
更新
似乎如果我扩展 org.apache.struts2.components.ServletUrlRenderer
Struts2 类覆盖 renderUrl
方法,我将能够做我想做的事。但我不知道如何告诉 Struts2 使用我自定义的 UrlRenderer
实现而不是默认的 ServletUrlRenderer
。
最佳答案
我找到了答案,因为我在更新问题时取得了进步。
我的发现是:
s:url
标签中的scheme
属性不支持表达式,只支持文字值。所以我做了什么:
s:url
标记中的所有 scheme
属性。UrlRenderer
,几乎使用了 ServletUrlRenderer
的副本。我更改了 renderUrl
方法检索方案默认值的行:String scheme = ActionContext.getContext().getValueStack().findString("scheme");
。这会将方案的默认值设置为当前操作的“方案”属性。struts.properties
。此属性告诉 Struts2 使用我的自定义实现:struts.urlRenderer = fully.qualified.name.for.my.CustomUrlRendererImplementation
此解决方案引入了可维护性问题,因为我从 2.3.8 版本的 Struts 中复制粘贴了一些代码。如果有人提供更好的解决方案,我会很乐意对其进行测试:)
关于java - 如何在 s :url tag? 中动态设置方案属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15569532/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
我搜索了很多,但没有一个链接能帮助我解决这个问题。我得到了 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s
我正在做 RegexOne 正则表达式教程,它有一个 question关于编写正则表达式以删除不必要的空格。 教程中提供的解决方案是 We can just skip all the starting
([\s\S]+|\s?) 中 |\s? 的目的或作用是什么?如果没有它,表达式会不会与 ([\s\S]+) 相同? 最佳答案 这不是完全相同的。 ([\s\S]+|\s?) 会匹配空字符串,而 ([
这个正则表达式有一组还是两组? 我正在尝试使用第二组访问 bookTitle 但出现错误: Pattern pattern = Pattern.compile("^\\s*(.*?)\\s+-\\s+
在 C 中给定一个字符串指针 s,下面的迭代会做什么?即它以什么方式遍历字符串? for (++s ; *s; ++s); 最佳答案 for (++s ; *s;++s) 表示 将指针 s 递增到字符
我正在用一个 node.js 应用程序解析一个大列表并有这段代码 sizeCode = dbfr.CN_DESC.split('\s+-\s*|\s*-\s+') 这似乎不起作用,因为它返回了 [ '
我正在编写一个简单的字符串连接程序。 该程序按照我发布的方式运行。但是,我首先使用以下代码编写它来查找字符串的结尾: while (*s++) ; 但是,这个方法并没有奏效。我传递给它的字符串
这个问题已经有答案了: What does (?和aramchand来自Mohandas Karamchand G 因此,在使用这些匹配来分割字符串后,您最终会得到 {"M", "K", "G"} 注
我正在尝试转换 Map到 List使用 lambda。 本质上,我想将键和值与 '=' 连接起来之间。这看起来微不足道,但我找不到如何去做。 例如 Map map = new HashMap<>();
我正在经历 K & R,并且在递增指针时遇到困难。练习 5.3(第 107 页)要求您使用指针编写一个 strcat 函数。 在伪代码中,该函数执行以下操作: 将 2 个字符串作为输入。 找到字符串
在下面的代码中,pS 和 s.pS 在最后一行是否保证相等?也就是说,在语句S s = S();中,是否可以确定不会构造一个临时的S? #include using namespace std; s
演示示例代码: public void ReverseString(char[] s) { for(int i = 0, j = s.Length-1; i < j; i++, j--){
我一直在寻找类似于 .NET examples 中的示例的 PowerShell 脚本.取一个 New-TimeSpan 并显示为 1 天 2 小时 3 分钟 4 秒。排除其零的地方,在需要的地方添加
def func(s): s = s + " is corrected" return s string_list = ["She", "He"] for s in string_li
我是 python 的新手。当我在互联网上搜索 lambda 时。我在 lambda_functions 中找到了这个声明. processFunc = collapse and (lambda s:
我最近开始学习正则表达式,并试图为上面的问题写一个正则表达式。如果限制只放在一个字母上(例如不超过 2 个“b”),这并不困难。 那么答案就是:a* c*(b|ε)a* c*(b|ε)a* c* 但是
当我运行 npm install 时出现以下错误,但我无法修复它。 我试过:npm install -g windows-build-tools 也没有修复这个错误 ERR! configure
有很多有趣的haskell网上可以找到片段。 This post可以在 this (awesome) Stack Overflow question 下找到. The author写道: discou
我知道以下三行代码旨在将字符串提取到$ value中并将其存储在$ header中。但是我不知道$value =~ s/^\s+//;和$value =~ s/\s+$//;之间有什么区别。 $val
我是一名优秀的程序员,十分优秀!