lay*_*ser 9 json portlet httprequest liferay
我是liferay portlet开发的初学者,我正在开发一个接收http get请求的portlet,处理一些信息,而不是返回一个json对象.我的问题是我的portlet发送了一个完整的html页面,而不仅仅是json对象.这是我的代码:
HttpServletResponse servletResponse = PortalUtil.getHttpServletResponse((renderResponse));
servletResponse.setHeader("Content-type", "application/json");
servletResponse.setCharacterEncoding("application/json");
PrintWriter out = servletResponse.getWriter();
out.write(EntityUtils.toString(responseEntity));
out.flush();
out.close();
Run Code Online (Sandbox Code Playgroud)
我在doView()方法中执行它,我知道这不是最好的做法,但我现在并不关心这一点.有人可以向我解释如何只返回我读过有关serveResponse的json对象,但我无法弄清楚如何调用它.
Par*_*mar 15
嗯,需要注意的doView()一点是,它主要负责渲染您的portlet.您的要求可以通过
1 - processAction(Portlet Action)或
2 - serveResource(Portlet AJAX服务)更好地实现.
我认为,AJAX请求 - 响应将是最合适的情况; 为此,您只需要在portlet视图上创建资源URL.喜欢:
<portlet:resourceURL var="ajaxResourceURL" />
Run Code Online (Sandbox Code Playgroud)
向页面添加JavaScript方法,从中可以生成对portlet的AJAX请求.该方法看起来像这样,
<script type="text/javascript">
function _callAjax(val1, val2){
var url = '<%=ajaxResourceURL %>'; // pass resource URL you created using scriplet / EL.
jQuery.ajax({
type : "POST",
url : url,
cache:false,
dataType: "json",
data: {
value1: val1, // extra parameters if you want to pass
value2: val2
},
success : function(data){
// do whatever you want with your response data
},
error : function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
alert(textStatus);
}
});
};
</script>
Run Code Online (Sandbox Code Playgroud)
在按钮/链接点击事件上调用该ajax方法:
<input type="button" onclick="_callAjax('val1', 'val2')" value="Send" />
Run Code Online (Sandbox Code Playgroud)
最后,在您的portlet的动作侦听器类中添加以下serveResource方法,负责处理基于AJAX的请求.
在这里,您可以获取您的请求参数并根据需要生成响应:
@Override
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException,IOException {
String value1 = ParamUtil.getString(request , "value1", "default"); // request parameters
String value2 = ParamUtil.getString(request , "value2", "");
PrintWriter writer = response.getWriter();
JSONObject jsonObject = new JSONObject();
jsonObject.put(String key, boolean/long/Collection/double/Map/Object value);
writer.write(jsonObject.toString());
}
Run Code Online (Sandbox Code Playgroud)
而已!希望,这对你有所帮助:)
| 归档时间: |
|
| 查看次数: |
9244 次 |
| 最近记录: |