Как получить доступ к объекту по ссылке (а не по значению) в файле jsp: include? - PullRequest
0 голосов
/ 23 августа 2011

немного назад история:

Я работаю над файлом, который должен быть очень большим, что в итоге приводит к следующей ошибке:

The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit.

Чтобы обойти это, я «модульно» использовал файл с помощью тегов jsp:include. Я успешно передал объекты из основного файла во включаемый файл, сериализовав объекты и используя тег jsp:param, а затем десериализовав его в файле jsp: include. Однако, как будто эти объекты используются, модифицируются, используются повторно и повторно модифицируются в основном файле и во множестве включенных файлов. мне интересно если есть способ вернуть объект в основной файл после рендеринга включенного файла, ИЛИ если есть способ получить доступ к этим объектам по ссылке, чтобы они могли быть изменены в одном включенном файле, и правильный экземпляр измененного объекта мог бы быть повторно использованы другие включенные файлы под ним?

До сих пор я рассматривал pagecontext.setAttribute() (который, похоже, не относится к ref и, по-видимому, не позволяет мне передавать значение обратно после изменения в основной файл) и jsp:param (почти то же самое, что и как pagecontext.setAttribute()).

Это то, что я имею до сих пор:

Пример кода ниже: (Надеюсь, это никого не смущает. Я не ищу синтаксических исправлений, я просто ищу решение, которое позволит ссылкам на тот же объект (например, глобальный переменная вместе с тегами include) или для передачи объекта обратно в main.jsp, чтобы следующий jsp: include мог получить к нему доступ после его изменения.

main.jsp

    //Serialized Objects, Google Gson object
       Gson gson = new Gson();

       String serializedObject = gson.toJson( objectName );


    <jsp:include page="/includes/includedFileName1.jsp">
       <jsp:param name="serializedObject" value="<%= serializedObject %>" />
    </jsp:include>

   <!-- Is there a way to ensure includedFileName2 .jsp gets the modified version of object from includedFileName1.jsp? -->

    <jsp:include page="/includes/includedFileName2.jsp">
       <jsp:param name="serializedObject" value="<%= serializedObject %>" />
    </jsp:include>

   <!-- Is there a way to ensure includedFileName3 .jsp gets the modified version of object from includedFileName2.jsp? -->

    <jsp:include page="/includes/includedFileName3.jsp">
       <jsp:param name="serializedObject" value="<%= serializedObject %>" />
    </jsp:include>

includedFileName1.jsp

    //Gson object used to convert serialized strings to java objects
    Gson gson = new Gson();

    ObjectType object = null;
    if (null != request.getParameter("serializedObject")) {
       object = gson.fromJson(request.getParameter("serializedObject"), ObjectType.class);
    }

    if (x = y) {object = somethingNew1;}

//is there a way to pass object back to the main.jsp?

includedFileName2.jsp

//Gson object used to convert serialized strings to java objects
Gson gson = new Gson();

ObjectType object = null;
if (null != request.getParameter("serializedObject")) {
   object = gson.fromJson(request.getParameter("serializedObject"), ObjectType.class);
}

if (x = y) {object = somethingNew2;}

//is there a way to pass object back to the main.jsp?

includedFileName3.jsp

//Gson object used to convert serialized strings to java objects
Gson gson = new Gson();

ObjectType object = null;
if (null != request.getParameter("serializedObject")) {
   object = gson.fromJson(request.getParameter("serializedObject"), ObjectType.class);
}

if (x = y) {object = somethingNew3;}

//is there a way to pass object back to the main.jsp?

Объект может или не может быть изменен, но должен быть доступен из всех трех включений, а последние изменения объекта должны быть доступны.

Спасибо за ваше время.

1 Ответ

0 голосов
/ 16 ноября 2011

Спасибо, @Home, @Ashley ...

Я переосмыслил способ, которым это было реализовано, и решил мою проблему, используя request.setAttribute () и request.getAttribute ().

<% 
    //set new parameters to be passed through to the jsp:include
    request.setAttribute("objectName", objectInstance);
%>
    <jsp:include page="/includes/requisitionClinicalConditionContent.jsp"/>
<%
    //get parameters passed from the jsp:include
    objectInstance = (object) request.getAttribute("objectName");
%> 

Я прохожу через объект с помощью request.setAttribute () и получаю его в моем jsp: include. Если он был изменен в jsp: include (чего в большинстве случаев нет; но у меня есть 1 или два случая, которые могут изменить значение), я возвращаю объект из jsp: iclude, используя request.setAttribute (0 и вернуть его на моей родительской странице JSP.

Спасибо за помощь, извините, я не ответил раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...