【问题标题】:Precompiling JSP pages预编译 JSP 页面
【发布时间】:2013-06-10 13:04:00
【问题描述】:

对不起我的英语。

我正在尝试使用 ANT 脚本预编译 JSP 文件。 有了这个,我从 JSP 生成了 servlet:

<target name="jspc">
    <taskdef classname="org.apache.jasper.JspC" name="jasper2">
        <classpath id="jspc.classpath">
            <pathelement location="C:\j2sdk1.4.2_12\lib\org.apache.jasper.jar" />
            <path refid="jbossweb.classpath"/>
        </classpath>
    </taskdef>

    <jasper2 validateXml="false" uriroot="${webapp.path}" package="org.fista.zg.ui.struts.pages"
        webXmlFragment="c:/generated_web.xml" outputDir="${webapp.path}/WEB-INF/src" />
</target>

所以,现在我有了 Servlet 类,我想编译这些类。有的类编译成功了,有的没有编译成功,很多编译不成功的页面都会抛出同样的错误,例如:

[javac] C:\Documents and Settings\Administrator\workspace\web-admin\WebContent\WEB-INF\src\agencyDelete_jsp.java:79: cannot resolve symbol
[javac] symbol  : variable actionForm 
[javac] location: class org.fista.zg.ui.struts.pages.agencyDelete_jsp
[javac]         new Object[] {((AgencyInputForm)((DefaultInputActionForm)actionForm).getFormBean()).getContractNr()});
[javac]                                                                          ^

在 JSP 代理中删除.jsp:

<bean:define id="actionForm" name="AgencyForm" />
<%
    String message = WebCtrlFactory.getCtrl(request).getLocalizationString("org.fista.zg.ui.struts.agency.remove",
        new Object[] {((AgencyInputForm)((DefaultInputActionForm)actionForm).getFormBean()).getContractNr()});
%>

Ant 编译脚本:

<javac destdir="${webapp.path}/WEB-INF/classes" optimize="off" debug="on"
            failonerror="false" srcdir="${webapp.path}/WEB-INF/src" excludes="**/*.smap"
            classpath="C:\Documents and Settings\Administrator\workspace\web-admin\build\classes">
    <classpath>
        <fileset dir="${webapp.path}/WEB-INF/lib">
            <include name="*.jar" />
        </fileset>
        <path refid="jbossweb.classpath"/>
    </classpath>
    <include name="**" />
    <exclude name="tags/**" />
    <exclude name="tiles/**" />
</javac>

所以,请帮我找出问题所在。我认为问题出在:“&lt;bean:define id="actionForm" name="AgencyForm" /&gt;”。为什么编译器看不到这个 bean?

【问题讨论】:

  • 你为什么要尝试从 scriptlet 访问表单 bean?
  • 小脚本!在他们抓住你之前逃跑……对不起,你刚刚被抓住了。
  • 你是否尝试在没有 JSP 的情况下编译它。

标签: java jsp servlets struts precompiling


【解决方案1】:

在 JSP Scriptlet 中访问“actionForm”bean(页面范围变量)的正确方法是

<%
String message = WebCtrlFactory.getCtrl(request).getLocalizationString("org.fista.zg.ui.struts.agency.remove",
new Object[] {((AgencyInputForm)    ((DefaultInputActionForm)pageContext.getAttribute("actionForm",PageContext.PAGE_SCOPE)).getFormBean()).getContractNr()});
%>

【讨论】:

  • 当您按照我的建议或其他不同的方法时,您是否遇到了同样的错误?
猜你喜欢
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多