<s:set>标签中value使用表达式变量的问题

【话题】<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!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值