1

我使用的代码可以正常工作,但这是我的 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() %>

我不确定这两个都是可移动的。

4

1 回答 1

3

您可以将<%=request.getContextPath() %>scriptlet 替换为 JSTL 标记:

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

看到这样的事情并不少见:

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

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

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


编辑:回复:你的评论:我不确定我理解你的意思,但我猜问题是你需要使用完全限定的类名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);
        //...
    }

    //...
}
于 2010-11-03T13:58:57.863 回答