问题标签 [ognl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
struts2 - OGNL 和通配符在使用 struts2-tiles-plugin 的瓷砖定义中工作?
我希望 Tiles 从 struts2 值堆栈中解析 ognl。这该怎么做?
使用 tile 2.2.2(虽然如果可以使用更高版本,例如 3,那很好)
这里提到了新功能: http ://tiles.apache.org/2.2/framework/whats-new.html
这里展示了如何实现它:http ://tiles.apache.org/2.2/framework/tutorial/advanced/el-support.html#OGNL_Support
但我不确定如何在我的项目中进行。是否有人在他们的 struts2 项目中使用了 tiles3?我记得阅读了一些默认情况下打开图块 3 中所有新功能的方法,但我找不到该页面的链接。
如果可以使用 spring 无论如何都可以完成配置,那很好(如果有帮助,如果没有,则不是问题)。
struts2 - 如何在 OGNL/Struts2 中迭代和索引列表列表?
我有一个配置文件如下的属性:
我希望为外部列表中的每个元素创建一个表,为内部列表中的前五个位置中的每一个创建一个列。我尝试使用这个:
但是,输出是 100 多行完全空白的列:
我知道数据已正确填充。当我这样做时:
我得到100多行这样的:
当我这样做时:
我得到一个例外:
所以我知道“行”解析为 ArrayList。我读到的关于 OGNL 的所有内容似乎都暗示我应该能够通过 [] 表示法对数组进行索引。我已经尝试了更多的 {}、# 等组合,我不会给你带来负担,但无济于事。谁能解释为什么这不起作用以及我需要做些什么才能使它起作用?
更新
在下面尝试四元数的建议时,我使用了以下代码:
它主要工作。不幸的是,复选框失败了:
如果我不使用键,则 id 或 value 的组合也不起作用。如果我只是名字和身份证:
如果不能解决:
如果我只使用名称:
它也不起作用:
如果我只使用 id,我会收到一些内部错误:
为什么复选框的参数需要与属性不同的语法?
java - 如何在 Struts 迭代器中访问 ValueStack 对象?
我有以下代码:
评论是评论对象的列表,其中包含评论的详细信息,例如评分和用户名。
我的问题是我无法访问循环内 ValueStack 上存在的任何对象。
循环外<s:property value="#request.restaurant.portalImage.url" />
正常工作。但在循环内它打印空。
AFAIK 迭代器将其集合推送到 ValueStack 上,以便所有 OGNL 表达式都针对它进行解析。但是我使用了 # 这意味着我明确指定了要解析的根对象。
为什么它仍然不起作用?
jsp - Struts 2 - 访问静态成员值。似乎忽略了 struts.properties 和 struts.xml 文件中的“struts.ognl.allowStaticMethodAccess”值
我正在尝试访问 JSP 中的静态成员值,如下所示:
"@package.subPackage.ClassName@STATIC_MEMBER"
STATIC_MEMBER 被声明为public static final String
分配了一个值,并且类具有公共范围。我的 struts.properties(位于 webapps\appName\WEB-INF\classes 文件夹下)有struts.ognl.allowStaticMethodAccess=true
条目。但是,Struts 似乎忽略struts.ognl.allowStaticMethodAccess=true
了 struts.properties 中的条目。
我在另一个项目中遵循了上述相同的步骤,并且运行良好。
注意:
1. 我已经交叉检查了完整的包、类和 STATIC_MEMBER 名称的正确性。
2.页面上没有错误/异常。3. 同一个JSP 可以从Action 类( )
中访问成员值。
4. 我尝试从其他类访问静态成员,但不起作用。
5. 我曾尝试删除 struts.properties 文件,并在 struts.xml 文件中的标签后创建一个条目,为 :
。重新启动并重新尝试。但是,不起作用。
6. 从服务器中删除 Web 应用程序及其缓存(工作文件夹)后,我重新构建、重新部署并重新启动了服务器,但是没有工作。<s:property value="actionMember"/>
<struts>
<constant name="struts.struts.ognl.allowStaticMethodAccess" value="true" />
环境:Java 1.6、Struts 2.1、Tomcat 6.0 @ Windows XP 2002
请帮忙。
提前非常感谢!
--------------------代码更新---------------------------- ---
班级
struts.properties
struts.ognl.allowStaticMethodAccess=true
JSP
<s:if test="errorType == @package1.subPackage1.FooClassName@INVALID_LOGIN">
some code here
</s:if>
Action 类:
1. private int errorType;
2. 有各自的 getter 和 settererrorType
甚至没有打印值,试过了:
<s:property value="@package1.subPackage1.FooClassName@INVALID_LOGIN"/>
java - 如何禁用ognl评估?
要强制 OGNL 评估,可以使用 %{} 语法,但应该使用什么来禁用它?
考虑以下代码 -
发生的情况是在值堆栈上查找 viewItem,当找不到时返回一个空字符串。
这不是我想要的。我想要的是作为参数传递的文字值 viewItem。
java - 在 s:select 中使用 #this 时出现奇怪的 OGNL 行为
考虑以下情况,其中 availableExclusions 是 Date 对象的数组。
我创建了上述内容以回答这个问题如何在 struts 2 选择标签中格式化日期列表?(我还建议其他解决方案可能是更好的方法)。不管使用这么长的 OGNL 表达式是否是一个好主意,我都看不出有必要:new java.util.Date(#this[0].time)
尽管出于沮丧创建了该片段,但令我惊讶的是,它发现它在看似等效的地方#this[0]
不起作用(没有产生输出)。
如果我们替换,listValue="#this[0].class"
我们会看到我们所期望的:class java.util.Date
创建一个新的 Date 的行为符合预期,并调用 Date 的不推荐使用的属性,例如listValue="#this[0].day"
产生预期的输出。
为什么我必须使用冗余表达式 new java.util.Date(#this[0].time)
而不是 #this[0]
在这个 select 语句中?
使用 Struts 2.3.1.2
struts2 - 可能的 struts-portlet 2.3.3 错误?动作类不在值栈的顶部
我正在将一个 struts 2.2.3.1 portlet 应用程序 (jsr168) 迁移到新版本 2.3.3。在大多数情况下,一切仍然正常,但有一个明显的问题。
我正在使用 package.properties 资源包来处理我的 jsp 中的标题和标签等内容。当我第一次点击操作时,会从资源包中检索消息并按预期显示。但是,当我对某个操作发出第二个请求时,会显示消息键,这通常意味着找不到资源。
(第一次执行操作和任何后续请求之间的主要区别似乎是,在第一个请求中,仅处理事件 portlet 阶段,而不是呈现 portlet 阶段。任何后续请求都使用这两个阶段。)
我花了很长时间才弄清楚发生了什么,但大致是这样的:
我开始逐步浏览org.apache.struts2.components.Text。当在 jsp 中遇到 struts 文本标记时使用此类。
end()方法使用来自TextProviderHelper的静态getText()方法。这就是我找到问题根源的地方:
上面的代码遍历值堆栈,直到找到TextProvider。因为ActionSupport实现了 TextProvider,并且因为 struts 试图将动作放在堆栈顶部或附近,所以动作通常是提供者。
这是两个版本在不同时间的值堆栈中的对象:
版本 2.2.3.1
第一个请求值栈
- --> TestPortletAction
- 默认文本提供者
第二次请求值栈
- --> TestPortletAction
- 默认文本提供者
- DirectRenderFromEventAction
- 默认文本提供者
版本 2.3.3
第一个请求值栈
- --> TestPortletAction
- 默认文本提供者
第二次请求值栈
- DirectRenderFromEventAction
- 默认文本提供者
- --> TestPortletAction
- 默认文本提供者
因此,由于某种原因,在新版本中,在处理完渲染阶段后,动作类不在堆栈顶部。这意味着TextProviderHelper使用DefaultTextProvider,它确实尝试定位资源包......但这样做永远不会成功。
我对DefaultTextProvider如何被推入堆栈进行了一些调查:
Jsr168调度程序。serviceAction () 调用ActionProxyFactory来创建动作代理。就在返回代理之前,调用prepare (),然后调用DefaultActionInvocation的init方法。init 调用createContextMap () 来创建堆栈
使用的构造函数:
啊啊啊,这就是我到目前为止所遇到的问题。剩下的问题是:
- 第二个DefaultTextProvider如何以及在何处被推入堆栈?(真的有理由拥有其中两个吗?)
- DirectRenderFromEventAction如何以及在何处被推入堆栈?
- 新版本的什么变化导致了这种情况?
- 这是错误还是预期行为?
一个可能的解决方案(确实可以解决它)是使用 ognl 显式调用操作的getText方法,但我认为这并不理想,它确实意味着更改一堆 jsp 文件。
可以在此处找到演示该问题的示例项目(这是一个 Maven 项目):
http://new-value-stack-order.googlecode.com/svn
我使用tomcat 6.0.25和pluto 1.1.7作为我的开发环境。
java - 使用 Struts Select 标签指定选项标签 (listValue)
标签的 listValue 属性用于指定在选择该选项时应向用户显示的标签。
例子 -
使用 OGNL 文字枚举列表时是否可以这样做?
我希望将 1Km 显示给用户并且整数 1 而不是字符串 1Km 与表单一起提交。
ognl - OGNL 中的通配符?
我必须编写一些 OGNL 才能在表格中查找某些内容,有点像使用 C# 字典。这很容易:
但现在我的要求发生了变化。现在我需要制定一些更复杂的规则,我不确定OGNL是否可以做到。我对更新的表达式有几个要求。我现在有两个不同的值及其组合需要担心。我们将值称为 A 和 B。规则如下所示:
- 如果出现 A 的特定值,则始终返回相同的值。
- 如果出现 A 和 B 值的某些组合,则返回另一个值。
- 如果 A 的任何值出现在我们特别关心的值之外,则返回另一个值。
如果我有 A 和 B 的所有可能值的列表,我可以制作一个非常大的哈希表,其中包含它们的每个连接以及为每种情况返回的正确值。如果我可以使用通配符,这似乎会容易得多。有没有人想过如何实现这一点,或者是否可以使用 OGNL?
java - 使用OGNL自定义struts2 textfield标签的值
我有一个包含用户信息的数据库。当用户登录时,我在会话中注册了用户,如下所示:
我想在我的 jsp 页面中获取用户的信息,以便用这些信息填充 struts2 文本字段。我尝试使用以下代码,但它不起作用:
我需要你的帮助。