好,需要注意的一件事是,这
doView()主要负责您的Portlet的呈现。通过
1-
processAction(Portlet操作)或
2-
serveResource(Portlet AJAX服务)可以更好地满足您的要求。
在我看来,AJAX请求-响应将是最合适的情况。为此,您只需要在portlet视图上创建资源URL。喜欢:
<portlet:resourceURL var="ajaxResourceURL" />
在页面上添加一个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>在按钮/链接单击事件上调用该ajax方法:
<input type="button" onclick="_callAjax('val1', 'val2')" value="Send" />最后,在您的portlet的动作侦听器类中,添加以下
serveResource方法,该方法负责处理基于AJAX的请求。
在这里,您可以获取请求参数并以所需的方式生成响应:
@Overridepublic void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException,IOException {String value1 = ParamUtil.getString(request , "value1", "default"); // request parametersString 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());}而已!希望对您有所帮助:)



