使用<s:form;标签出现不能接受任何表达式(action does not accept any express)
Posted YQS_Love
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用<s:form;标签出现不能接受任何表达式(action does not accept any express)相关的知识,希望对你有一定的参考价值。
一、问题描述
我们在使用<s:form>
标签时,有时候会出现以下的错误:
org.apache.jasper.JasperException: /WEB-INF/page/system/userImport.jsp (line: 21, column: 4) According to TLD or attribute directive in tag file, attribute action does not accept any expressions
省略很多(出现错误一般都是自己代码有问题,不用看别人的).....................
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)
其实加粗体部分的字体已经说得很清楚了(属性action不能接受任何表达式),这对于初学者来说,比如我,虽然明白那句话说的什么意思,但是就是不知道自己错在哪儿了。那么今天小编我就以一个初学者的角度来为大家解决这个问题(高手勿喷)。
二、问题的原因
相信各位初学者同我一样,在使用Struts的s:form标签时是像下面一样使用的。
<s:form id="selectFileForm" action="$pageContext.request.contextPath /system/userAction_importdata.do" theme="simple" method="post" enctype="multipart/form-data">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td align="center" colspan="4">
<s:submit name="import" value="导入" cssStyle="width: 60px; font-size:12px; color:black; height=22" onclick="submitData()"></s:submit>
<input type="button" name="Reset1" id="save" value="关闭" onClick="window.close();window.opener.reflash();" style="width: 60px; font-size:12px; color:black; height:22">
</td>
</tr>
</table>
</s:form>
其实错误的原因很简单,就是在的action里,不能有jsp的表达式(下面粗体部分),但是呢,新的问题又出现了,就是服务器找不到我们要提交的路径(某些版本的struts能够找到类似“/system/userAction_importdata.do”,具体的我也不清楚,遇到这个问题时,可以尝试一下我的办法),我又想用Struts的标签,这个时候就只能另觅它法了。
action=”$pageContext.request.contextPath /system/userAction_importdata.do” theme=”simple”
三、解决方法
我就将我的做法告诉大家,或许大家有更好的办法。
(1)首先在上增加一个ID;
<s:form id="selectFileForm" method="post" enctype="multipart/form-data">
(2)在提交按钮上添加一个onclick事件,让它执行js函数;
<s:submit name="import" value="提交" cssStyle="width: 60px; font-size:12px; color:black; height=22" onclick="submitData()"></s:submit>
(3)编写js函数,当点击按钮时提交数据,有需要的可以验证一下数据在提交。
<script language="javascript">
function submitData()
document.selectFileForm.action = "$pageContext.request.contextPath /system/userAction_importdata.do"
document.selectFileForm.submit();
</script>
以上是关于使用<s:form;标签出现不能接受任何表达式(action does not accept any express)的主要内容,如果未能解决你的问题,请参考以下文章