在JS中获取portlet会话

Getting portlet session in JS

本文关键字:portlet 会话 获取 JS      更新时间:2023-09-26

嗨,我正在尝试在JS变量中获取portlet会话。我该怎么办

 request.getPortletSession().getAttribute("countryList");  //This is my .java class code

我需要在JS中获取相同的?

您不能通过javascript访问java会话。

一种解决方案是将java对象序列化为json字符串,并将其保存到会话中(如果对象为null,只需保存一个等于"null"的字符串)

getPortletSession().setAttribute("countryListJson", JSONUtil.toJSON(yourObject));

然后你可以使用

<script type="text/javascript">
var obj = <%=request.getPortletSession().getAttribute("countryListJson")%>;
</script>

另一个解决方案是为ajax调用提供一个json填充控制器方法。并返回如下字符串:

return "var countryList = " + JsonUtil.toJson(request.getPortletSession().getAttribute("countryList")) +";"

然后您应该将此方法映射到一个url,例如"/contryList.do"并且在您的页面中:

<script type="text/javascript" src="<%=request.getContextPath()%>/contryList.do"></script>
<script type="text/javascript">
    alert(contryList);
 </script>

据我所知,您需要在一些JS var中放入countryList(来自控制器)。您不需要在JS中获取portlet会话,您应该能够执行以下操作:

我设法使用scriptlets和usebean从controller获得了一些字符串到js。试试这样的东西:

假设我需要从后端提醒一个错误,并且我已经将它放在一个名为"error"的java字符串中(在控制器中)。我可以做到这一点(doView):

String error = request.getAttribute("error"); // or it can be simply String error = "sometext"
if ((error != null) || (!error.equals(""))){
request.setAttribute("error", error);
}
else request.setAttribute("error","false");

然后,在您的jsp中,我将在顶部放置一个usebean标记,如:

<jsp:useBean id="error" class="java.lang.String" scope="request"></jsp:useBean>

然后,在脚本标记之间:

var error = "<%=error%>";
if (error != "false") alert(error);

正如我所注意到的,您需要使用if/else语句在控制器中设置var(使用setAttribute)。