【问题标题】:jstl problem : 2 last scriptlet to remove from my jspjstl 问题:2 最后一个要从我的 jsp 中删除的小脚本
【发布时间】:2010-11-03 13:40:09
【问题描述】:

我使用的代码运行良好,但这是我的 jsp 中的最后一个小脚本:

<%  List listMillesime= MultiMillesimeFactory.getInstance().getListMillesimeActif();
    pageContext.setAttribute("listMillesime",listMillesime);
    %>
...
<c:forEach var="millesime" items="${listMillesime}">
...
</c:forEach>

这是工厂声明:

public class MultiMillesimeFactory {

    private static MultiMillesime multiMillesime;

    private MultiMillesimeFactory(){
    }

    public static MultiMillesime getInstance() {
        if (multiMillesime == null) {
            multiMillesime = new MultiMillesime();
        }
        return multiMillesime;
    }
}

Multimillesime 是一个标准类,其方法getListMillesimeActif 返回一个列表。声明:

public class MultiMillesime {
...
   public List getListMillesimeActif() throws Exception {
     List _l = Collections.synchronizedList(new LinkedList());
...
     return _l;
   }
}

c:for each 在列表和枚举上都可以正常工作,但这里的问题来自于 getInstance 的使用,我尝试了 MultiMillesimeFactory.Instance.ListMillesimeActif,但没有成功。

最后一个小脚本是:

<a href='<%=request.getContextPath() %>

我不确定这两个是否可以移动。

【问题讨论】:

    标签: java jsp jstl scriptlet


    【解决方案1】:

    您可以将&lt;%=request.getContextPath() %&gt; scriptlet 替换为 JSTL 标记:

    <a href="${pageContext.request.contextPath}" />
    

    这样的事情也不少见:

    <c:set var="ctx" value="${pageContext.request.contextPath}"/>
    ...
    <a href="${ctx}" />
    

    至于MultiMillesimeFactory 的问题:看起来这是您代码库中的一个类,我们无法神奇地为您调试该问题。听起来不像是 JSP 问题。

    “尝试 MultiMillesimeFactory.Instance.ListMillesimeActif 没有成功”是什么意思?


    编辑: re:您的评论:我不确定我理解您的意思,但我猜问题是您需要使用完全限定的类名 MultiMillesimeFactory正确查找。但是,您确实应该尽可能避免使用 scriptlet。相反,使用适当的 servlet 将 ListMillesimeActif 注入请求中,如下所示:

    public class MyServlet extends HttpServlet implements Servlet
    {
        //...
    
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response)
        {
            //...
            List listMillesime = MultiMillesimeFactory.getInstance().getListMillesimeActif();
            request.setAttribute("millesime", listMillesime);
            //...
        }
    
        //...
    }
    

    【讨论】:

    • 尝试 MultiMillesimeFactory.Instance.ListMillesimeActif 没有成功:这意味着通常 jstl“找到”看起来像属性或伪属性的 getter 的方法。事实上,我有 95% 的把握 A.ListMillesimeActif 找到了 A.getListMillesimeActif() 方法,即使 ListMillesimeActif 不是 A 类的属性而只是一个方法。我已经为 getInstance 尝试过同样的方法,我认为这是我的问题的关键。
    • @jayjay:查看我的编辑。我仍然不清楚究竟什么是“不成功” - 你得到编译器错误吗?空指针异常?等等
    • 我的 jsp 中没有空列表,但是您在参数中使用该列表的解决方案必须是好的。我会试试然后关闭这个主题
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2017-12-31
    • 2020-12-31
    • 2022-11-04
    • 2020-07-09
    • 2019-08-21
    • 2012-04-01
    相关资源
    最近更新 更多