【话题】<s:set>标签中value使用表达式变量的问题 2009-07-12 18:21:26 来自:yyqqjyl 浏览数:212次
HTML code <%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title> Condition Flow
</title> </head> <body> <h3> Condition Flow </h3>
username:<%="'"+request.getParameter("name")+"'" %><br>
<s:set name="name" value ="<%="'"+request.getParameter("name")+"'" %>"></s:set>
<br> username:<%="'"+request.getParameter("name")+"'" %><br>
</body> </html>
在运行的时候,这句报错
<s:set name="name" value =" <%="'"+request.getParameter("name")+"'" %>"> </s:set> <br>
请求URL http://localhost:8080/struts2Demo/condition.jsp?name='java'
出错信息:
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /condition.jsp(11,16) According to TLD or attribute directive in tag file, attribute value does not accept any expressions
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1172)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:819)
org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1507)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2386)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2392)
org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2336)
org.apache.jasper.compiler.Validator.validate(Validator.java:1737)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:178)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:306)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
其实就是要通过URL来传一个值,然后在页面获取,这个值后面有用,需要判断的.我想全部都用标签来解决
有什么好的解决方案么?
weijiaqi回复于12日18点27分 value="'dsfsd'";这样对吗?
貌似应该把'去掉 cwljf回复于12日18点34分 原因可能是因为你使用了 <%..%>代码 or JSP EL表达式。Struts 2从 version2.0.11开始已经不支持strutstag与JSP EL表达式混合使用了(不在struts tag里使用EL还是可以的),而只支持OGNL (关于OGNL介绍的中文连接:http://www.blogjava.net/max/archive/2007/04/28/114417.html)。
原因见:http://struts.apache.org/2.0.11/docs/release-notes-2011.html byxdxm回复于12日18点42分 <s: 中不能使用 <% %> 朱锦亮回复于12日18点45分 4楼的回答不正确,在STRUTS2不能这样写
写的出现错误:
org.apache.jasper.JasperException: /condition.jsp(12,43) quote symbol expected
5楼的回答:
value="'dsfsd'";这样对吗?这样可以的,但是我的value值是个变量,是从URL中取出来的
' 其实要不要无所谓,只是为了后文的比较方便点,直接拼接的字符串.
HTML code username:<%="'"+request.getParameter("name")+"'" %><br>
这个代码正确,可以输出username:'java'
但是下面代码就不正确了
HTML code <s:set name="name" value ="<%="'"+request.getParameter("name")+"'" %>" ></s:set><br>
在TOMCAT 中报错
/condition.jsp(11,16) According to TLD or attribute directive in tag file, attribute value does not accept any expressions
好象是不能接受 任何一个表达式. wangyi01回复于12日18点53分 就直接用value="name"吧 regularly回复于12日19点01分 这个问题还没有人回答么? 荣苑衡回复于12日19点07分 貌似不行 胖丁妈回复于12日19点15分 struts2用的不熟,郁闷,慢慢来! 李治霖回复于12日19点23分 汗,是不是问题表述不清楚?米人回答,帖子要沉了.郁闷死 showicat回复于12日19点30分 刚才理解错了
你试试这样行吗
(String)request.getParameter("name") 如沐春风回复于12日19点35分 沉了....
顶起 刘子丰回复于12日19点44分 value="#request.name" weijiaqi回复于12日19点49分 版本问题 用以前的版本可以,2.1以后的版本都不行了 幼牛妈回复于12日19点56分 今天不管了,明天再来看 斯汀回复于12日20点02分 value = <%=request.getParameter("name")%>
这样不对? 不了解struts 小人华子回复于12日20点09分 谢谢各位, <s:set/>中不能使用表达式来给value赋值, <%= %>和${param.name}都不可以,很奇怪 liuzhongyan回复于12日20点17分 楼上的正解. crystalch回复于12日20点25分 楼上的兄弟啊,也不行,这个方法早就试过了 兜兜1997回复于12日20点30分 value里加这个 <%= %>干什么用?
value="{name}" buterfly回复于12日20点39分 他NND,全部用JSTL来写,火了,结贴!!!!!!!!!!!!!!!!!!!!!!!!!
王璐瑶回复于12日20点45分 用EL不行么? ${param.name} suyao回复于12日20点54分 #request.name 不知道这样的方式是否可以的 黄蓉々回复于12日21点00分 顶下,帖子要沉了 guaiguaihan回复于12日21点07分 哈哈,发现只有20分,每人给4分 liao657回复于12日21点15分 怎么?米人知道么?struts2没人去看么? vicky17回复于12日21点23分 #name 来取值 mxiaoyao回复于13日10点06分
Struts 2不再支持在struts tag里使用JSP EL表达式,要用
<s:set name="name" value="#parameters.name[0]" />
注:版本问题 用以前的版本可以,2.1以后的版本都不行了 ,不支持在struts标签中使用el表达式或jstl,必须使用ognl!!!!