使用<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)的主要内容,如果未能解决你的问题,请参考以下文章

s:form标签

正则表达式-量词

警告:validateDOMNesting(...): <div> 不能作为 <p> 的后代出现

正则表达式 只能出现一次或0次

电力项目s标签实现页面布局

如何使 HTML 输入标签只接受数值?