我把这个参数发送给我的strut动作
Cdata[1]=bar
在我的行动中,我对索引和值感兴趣。如OGNL文档所示,我为CDATA定义了一个getter/setter对:
public void setCdata(int index, String value){
LOG.info("setData; key="+ key +"; value="+ value);
// store index and value;
}
public String getCdata(int index){
return null; // don't really need a setter
}
这是我得到的例外:
2013-04-29 15:38:49,792 [http-apr-8080-exec-3] WARN com.opensymphony.xwork2.util.logging.commons.CommonsLogger.warn(CommonsLogger.java:60) - Error setting expression 'cdata[1]' with value '[Ljava.
lang.String;@4223d2a4'
ognl.OgnlException: target is null for setProperty(null, "1", [Ljava.lang.String;@4223d2a4)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2309)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.ASTChain.setValueBody(ASTChain.java:227)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.Ognl.setValue(Ognl.java:737)
...
如果我定义一个公共成员变量String[]cdata=new String[1000]
我在日志中没有看到任何异常,但我的setter也没有被调用。如果成员变量是私有的,我再次得到另一个异常。
根据文档,OGNL提供了对JavaBeans的索引属性的支持:OGNL参考指南:
JavaBeans支持索引属性的概念。具体而言,这意味着对象具有一组遵循以下模式的方法:
public PropertyType[] getPropertyName();
public void setPropertyName(PropertyType[] anArray);
public PropertyType getPropertyName(int index);
public void setPropertyName(int index, PropertyType value);
您没有实现所有这些方法。此外,如果您没有初始化数组,则无法设置值。
可以在此处阅读有关索引属性的更多信息。
索引属性
索引属性是数组而不是单个值。在本例中,bean类提供了获取和设置整个数组的方法。下面是名为testGrades
的int[]
属性的示例:
public int[] getTestGrades() {
return mTestGrades;
}
public void setTestGrades(int[] tg) {
mTestGrades = tg;
}
对于索引属性,bean类还提供了获取和设置数组特定元素的方法。
public int getTestGrades(int index) {
return mTestGrades[index];
}
public void setTestGrades(int index, int grade) {
mTestGrades[index] = grade;
}
我的解决方案(相当丑陋的黑客):
我让我的动作类实现了ServletDemestAware
,并在动作中迭代来自HttpServletRequest
的参数映射,从中获取cdata并解析它的索引和值
我必须更改sent参数并将其编码为egcdata[999]=foobar
likecdata\u 999\uuu=foobar
,因为如果它看起来像struts需要的数组字段,那么action类中就有一个setter/getter。
使用以下设置
List<String> cdata = new ArrayList<String>();
public List<String> getCdata() {
return cdata;
}
public void setCdata(final List<String> cdata) {
if (cdata == null) {
this.cdata = new ArrayList<String>();
} else {
this.cdata = cdata;
}
}
从JSP提交值,如cdata[1]=value等
唯一的要求是要有getter/setter。我已经在Java1.6上测试了这个Tomcat7。您也可以提交类似cdata[0]和cdata[1]的值
private Map<String, String> data = new HashMap<String, String>();
public Map<String, String> getData() {
return data;
}
public void setData(Map<String, String> data) {
this.data = data;
}
JSP可以有
<s:form action="indexProperty">
<h3>Test The Map</h3>
<input type="text" name="data['0']"/>
<input type="text" name="data['1']"/>
<s:iterator value="data.entrySet()" var="aData">
<s:property value="#aData.key" />-<s:property value="#aData.value" />
</s:iterator>
<input type="submit" name="submit" value="submit"/>
</s:form>
在没有问题的情况下填充
1. 前言 MyBatis 的动态 SQL 广泛应用到了OGNL 表达式,OGNL 表达式可以灵活的组装 SQL 语句,从而完成更多的功能。OGNL 易学易用,与 Java 代码几乎一致,本小节我们将系统的介绍 OGNL 表达式在 MyBatis 中的使用。 2. 定义 慕课解释:OGNL 全称 Object-Graph Navigation Language,是 Java 中的一个开源的表达式语
我的目标是创建一个新的实例,其中前2个元素是原始元素,之后是最后3个元素的中间值。例如,< code>[5,2,9,1,7,4,6,3,8]变成< code>[5,2,5,2,7,4,6,4,6]。 我解决这个问题的方法是创建2个新的数组列表,其中一个是从索引2开始的3个元素之间的子数组,具有排序,最后将新子数组的索引1放入我的新数组列表中。但是,这会遇到索引越界错误。
问题内容: 我已经进行了很多编程工作,最近开始学习更多纯粹的计算机科学主题(用于工作面试)。 我知道Array和LinkedList数据结构之间的区别,但是现在我已经开始使用Java,我看到了这个ArrayList,在概念上我遇到了麻烦。 网络搜索仅真正向我展示了如何使用它们以及何时使用它们(每种优点),但是没有任何东西可以回答我的问题: 什么是ArrayList?我的假设是,它是一个维护对每个元
问题内容: 我有一个奇怪的情况。 我有一个2D Numpy数组,x: 我有2个索引器-一个索引为行,一个索引为列。为了索引X,我必须执行以下操作: 不仅仅是: (失败:错误,无法通过(2,)广播(20,)) 我希望能够使用广播在一行中建立索引,因为这样可以使代码保持干净和可读性…而且,我对幕后的python并不太了解,但是据我了解它,它在一行中应该更快(我将使用相当大的数组)。 测试用例: 问题答
OGNL 是一种图对象的导航语言,这是一个表达语言获取和设置属性的Java对象。您使用相同的表达都得到和设置Key-Value的属性。 该ognl.Ognl类包含方便评价方法的OGNL表达式。为此,您可以分两个阶段,剖析表达成一个内部表格,然后使用,内部的任何形式设置或获取价值的财产;或你可以在一个阶段,并获得或设置属性使用字符串的形式表达直接。 OGNL开始,以建立社团之间的UI组件和控制器使用
9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 数据库、表、索引、列和别名是识别符。该节描述了在MySQL中识别符的允许的语法。 下面的表描述了每类识别符的最大长度和允许的字符。 识别符 最大长度(字节) 允许的字符 数据库 64 目录名允许的任何字符,不包括‘/’、‘\’或者‘。’ 表 64 文件名允许的任何字符,不包括‘/’、‘\’或者‘。’ 列 64 所有字符 索引 64 所