2

次のようにJSR168ポートレットを作成しました。

public class GetTest extends GenericPortlet {
    @Override
    public void doView(RenderRequest request, RenderResponse response) 
             throws PortletException, IOException {
        PortletRequestDispatcher rd = 
                      getPortletContext().getRequestDispatcher("/getTest.jsp");
        rd.include(request, response);
    }
}

このためのポートレットはgetTest.portletという名前で、WebContentフォルダーにあります。このためのjspページ:

<%
    String params = request.getParameter("params");
    out.print("Params: " + params);
%>

ここで、WeblogicのDISCフレームワークを使用して、このポートレットにAjaxgetリクエストを作成します。これどうやってするの?

私はこれに関してネットで検索しましたが、私が使用できる有用な例はありませんでした。私が試したことは次のとおりです。

other.jspで:

.....
<script type="text/javascript">
    var dataUrl = "/getTest.portlet?params=hi";
    var xmlhttp = new bea.wlp.disc.io.XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
            alert(xmlhttp.responseText);
        }
    }
    xmlhttp.open('GET', dataUrl, true);
    xmlhttp.send(null);
</script>
....

警告で私は空白になります。このポートレットのjspページにあるように、「Params:hi」を取得する必要があります。どうすればこれを達成できますか?

私は以下の記事を読みましたが、有用なものが見つからなかったか、何かを見逃した可能性があります。

このポートレットが接続されているデスクトップポータルのディスクも有効にしました。

4

1 に答える 1

0

最後に、私はそれを自分で見つけました。JSR 286ポートレットのリソース提供機能を使用して、Ajaxリクエストを介してデータを取得する必要があります。あなたがする必要があるのは:

  1. ポートレットのリソースURLを作成します。<portlet:resourceURL var="homeURL" id="home" escapeXml="false" />
  2. このURLを使用して、ポートレットにAjaxリクエストを送信します。

    var path="<%=homeURL.toString()%>";
    request.onreadystatechange=function () {
        if (request.readyState == 4) {
            if (request.status == 200) {
                alert(request.responseText);
            } else {
                alert("Problem retrieving data from server.");
            }
        }
    };
    request.open("GET", path, true);
    request.send(null); 
    
  3. ポートレットで、ロジックをserveResource(ResourceRequest request, ResourceResponse response)メソッドに記述します。データ値を属性として設定し、要求を転送してから、要求ディスパスサーを使用して要求、応答をJSPページに転送します。または、データ値をJSON形式でレスポンスライターに直接書き込むこともできます。(response.getWriter()
  4. データをJSPページに渡すことを選択した場合は、JSPページでリクエスト属性からデータを取得し、必要に応じて表示します。
  5. レスポンスライターを使用してデータをJSON形式で渡すことを選択した場合は、そのデータをJavaScritpで解析してから、適切な形式で表示する必要があります。
  6. また、データをポートレットに渡す場合は、Ajaxリクエストを使用してデータをサーブレットに渡すのと同じ方法で簡単に渡すことができます。この行では、データを渡すrequest.send(null)代わりに。null

これが将来の訪問者に役立つことを願っています。:-)

それでも、これがこれを行うための最良の方法であるかどうかはわかりません。他の解決策はいつでも歓迎です。

于 2012-05-12T06:15:00.787 に答える