jstl проблема: 2 последних сценария, которые нужно удалить из моего jsp

Я использую код, который отлично работает, но вот последние скриптлеты в моем 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;
    }
}

Multimillime - это стандартный класс с методом 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() %>

Я не уверен, что оба они съемные.


person jayjaypg22    schedule 03.11.2010    source источник


Ответы (1)


Вы можете заменить скриптлет <%=request.getContextPath() %> тегом JSTL:

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

Также не редкость увидеть что-то подобное:

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

Что касается проблемы с MultiMillesimeFactory: похоже, что это класс в вашей кодовой базе, и мы не можем волшебным образом отладить эту проблему за вас. Это не похоже на проблему JSP.

Что означает «безуспешно пробовал MultiMillesimeFactory.Instance.ListMillesimeActif»?


Редактировать: относительно вашего комментария: я не уверен, что понимаю, что вы имеете в виду, но я предполагаю, что проблема в том, что вам нужно использовать полное имя класса MultiMillesimeFactory для правильного поиска. . Однако вам действительно следует избегать использования скриптлетов, насколько это возможно. Вместо этого используйте правильный сервлет для внедрения 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);
        //...
    }

    //...
}
person Matt Ball    schedule 03.11.2010
comment
попробовал MultiMillesimeFactory.Instance.ListMillesimeActif безуспешно: это означает, что обычно jstl находит метод, который выглядит как геттер для атрибута или псевдоатрибута. Действительно, я примерно на 95% уверен, что A.ListMillesimeActif найдет метод A.getListMillesimeActif(), даже если ListMillesimeActif не является атрибутом класса A, а просто методом. Я пробовал то же самое для getInstance, и я думаю, что это ключ к моей проблеме. - person jayjaypg22; 03.11.2010
comment
@jayjay: посмотри мое редактирование. Мне до сих пор не ясно, что именно не удалось - вы получаете ошибку компилятора? Исключение нулевого указателя? и Т. Д. - person Matt Ball; 03.11.2010
comment
нет пустого списка в моем jsp, но ваше решение с этим списком в параметре должно быть хорошим. попробую тогда тему закрою - person jayjaypg22; 03.11.2010