よくご存知のように、doView()
が主にポートレットのレンダリングを担当しています。要件は、
1 - processAction
(ポートレットアクション)または
2 - serveResource
(ポートレットAJAXサービス)によって、よりよく達成できます。
私の見解では、AJAXリクエスト - 応答が最も適したケースです。そのためには、ポートレット・ビューにリソースURLを作成するだけです。 Like:
<portlet:resourceURL var="ajaxResourceURL" />
JavaScriptメソッドをページに追加すると、そこからポートレットに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" />
そして最後に、ポートレットのアクション・リスナー・クラスに以下の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());
}
厥それを!希望、これはあなたのために役立ちます:)
私はポートレットでHttpServletRequestまたはHttpServletResponseクラスを使用することをお勧めします。ポートレットプログラミングモデル全体を壊し、さらに悪い習慣を歓迎するだけです。壊れたウィンドウのアイデアを参照してください。http://www.codinghorror.com/blog/2005/06/the-broken-window-theory.html –
* doViewでこれを実装することは、動作しません*。これは 'serveResource'の内容です –