最近出现一个奇怪的问题,就是当点击一个页面的时候,同一个action调用了两次,导致页面没有任何响应。
报错信息如下:
WARN 2011-06-10 11:49:54,781 com.opensymphony.xwork2.util.logging.commons.CommonsLogger: Error setting expression '.css' with value '[Ljava.lang.String;@17cd18d'
ognl.ExpressionSyntaxException: Malformed OGNL expression: .css [ognl.ParseException: Encountered " "." ". "" at line 1, column 1.
Was expecting one of:
":" ...
"not" ...
"+" ...
"-" ...
"~" ...
"!" ...
"(" ...
"true" ...
"false" ...
"null" ...
"#this" ...
"#root" ...
"#" ...
"[" ...
"{" ...
"@" ...
"new" ...
<IDENT> ...
<DYNAMIC_SUBSCRIPT> ...
"/'" ...
"`" ...
"/"" ...
<INT_LITERAL> ...
<FLT_LITERAL> ...
]
at ognl.Ognl.parseExpression(Ognl.java:112)
at com.opensymphony.xwork2.ognl.OgnlUtil.compile(OgnlUtil.java:214)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:198)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:161)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149)
发现出现了一个变量名称为.css的,但是我们在调用的时候,并没有传此参数。
最后发现在一个js文件里,有这样一行代码:
function AddCss(){
var l=CreateEl("link");
l.setAttribute("type","text/css");
l.setAttribute("rel","stylesheet");
l.setAttribute("href","?.css");
l.setAttribute("media","screen");
document.getElementsByTagName("head")[0].appendChild(l);
}
注意第5行,设置href的时候,值为?.css。
这个在页面的显示html如下:
<link rel="stylesheet" type="text/css" href="?.css" media="screen"/>
在action给前台传输数据时,这时会把?后面的.css作为变量名称再次调用一次action,因为后台没有.css对应的set/get方法,并且.css也不符合java变量定义的语法所以报错。
将这行代码注释点后,就正常运行了。