Я использую liferay MVC. В проекте у меня есть портлет, который обращается к множеству разных запросов: сканирование и запрос и получение некоторых данных из каждого запроса. Я сохраняю те же данные в сеансе для полного цикла, но если я открою новую вкладку в браузере, данные перепутаются. Данные из последнего запроса перекрывают предыдущие данные.что можно использовать вместо сеанса для хранения переменных, полученных из нескольких запросов в liferay
Я попытался использовать модель для хранения данных, даже используя новое ключевое слово с объектом, ссылка всегда указывает на новый запрос для всех других запросов.
Итак, что можно использовать вместо сеансов для таких вопросов.
вот мой пример кода:
public void init() throws PortletException {
viewJSP = getInitParameter("view-template");
System.out.println("View Jsp is " + viewJSP);
}
Modelxyz xyz;
public void doView(RenderRequest renderRequest,
RenderResponse renderResponse) throws IOException, PortletException {
xyz = new Modelxyz();
HttpSession session = PortalUtil.getHttpServletRequest(renderRequest)
.getSession(false);
try {
themeDisplay = (ThemeDisplay) renderRequest
.getAttribute(WebKeys.THEME_DISPLAY);
List<x> x = xLocalServiceUtil.findByx(true);
renderRequest.setAttribute("x", x);
session.setAttribute("x,);
include(viewJSP, renderRequest, renderResponse);
}
public void serveResource(ResourceRequest rrq, ResourceResponse rrr)
throws PortletException, IOException {
if (resourceID.equals("gety")) {
HttpSession session = PortalUtil.getHttpServletRequest(renderRequest)
.getSession(false);
session.getAttribute("x",x);
y=getY(x);
session.setAttribute("y",y);
}else if(resourceID.equals("getz")) {
//use y to get z
HttpSession session = PortalUtil.getHttpServletRequest(renderRequest)
.getSession(false);
session.getAttribute("y");
z=getz(y);
session.setAttribute("z",z);
}
Даже когда я попробовал класс модели для хранения х и у, используя
Modelxyz хуг = новый Modelxyz(); // предполагает, что это имеет методы получения и установки
public void serveResource(ResourceRequest rrq, ResourceResponse rrr)
throws PortletException, IOException {
if (resourceID.equals("gety")) {
x=xyz.getX();
y=getY(x);
xyz.setX(y);
}else if(resourceID.equals("getz")) {
//use y to get z
y=xyz.getY();
z=getz(y);
xyz.setZ(z)
}
Это слишком портит данные при использовании из различных tabs.What может быть альтернативой для этого ???
Что вы подразумеваете под «но если я открою новую вкладку в браузере, данные будут испорчены»? Из того, что я знаю, если вы посещаете один и тот же вид на двух вкладках A и B в том же браузере, поскольку он использует один и тот же сеанс пользователя, тогда данные, которые будут сохранены, будут иметь последнюю вкладку, которая отправляет запрос на сервер (либо A, либо B). Это ожидаемое поведение. Что вам нужно? Кроме того, если вы используете модель для хранения этих данных, модель должна храниться где-то в другом месте, например сеанс или база данных, но опять же сценарий, изображенный выше, снова будет расти. –
С помощью модели снова данные перепутались, с использованием сеанса ожидалось ........ но я думаю, проблема связана с общим объектом, так как ссылка xyz всегда указывает на самый последний объект. Теперь я ищу решение, в котором я мог бы хранить данные с разных вкладок в отдельном объекте модели отдельно, но я не могу продолжить. –
Вы ищете уникальные сеансы для разных вкладок в одном браузере? Потому что это то, что не поддерживается браузером. Попробуйте моделировать свой сценарий с помощью какого-то стандартного веб-приложения, такого как Gmail или что-то в этом роде. Также, пожалуйста, проясните бизнес-сценарий который требует этой логики. –