在JS中获取portlet会话

时间:2012-03-13 05:47:04

标签: javascript session portlet

您好我正在尝试在我的JS变量中获取portlet会话。我该怎么办呢

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

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

2 个答案:

答案 0 :(得分:2)

您无法通过javascript访问java会话。

一种解决方案是将java对象序列化为json字符串并将其保存到会话中(如果object为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>

答案 1 :(得分:0)

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

我设法使用scriptlet和usebean从控制器到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)。