您好我正在尝试在我的JS变量中获取portlet会话。我该怎么办呢
request.getPortletSession().getAttribute("countryList"); //This is my .java class code
我需要在JS中获取相同的内容吗?
答案 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)。