0

liferay カスタム ポートレットでページを更新せずに、ajax を使用して jsp ページ データを送信しています。

私はそれで2つの問題に直面しています:

  1. リソースサーバーメソッドにAjax関数を呼び出すと、そのメソッドですべてのajaxデータが取得されますが、すべてが完了すると、データが返されません。では、Ajax 関数が正常に実行された後、どうすればデータを取得できますか。

  2. フォームで単純な HTML ファイル アップロード コントロールを使用しました。単純な送信メソッドを使用している場合は、アップロード リクエストを呼び出してファイルのすべての属性を取得し、アップロード リクエストでファイルをアップロードしていますが、Ajax の場合はすべてを行う必要があります。アクションクラスのリソースサーバーメソッドでリソースアクションをnull使用し、アップロードリクエストですべての値を取得していますが、どうすればこの問題を解決できますか?

1 つのサンプル Ajax 呼び出しとリソース サーバー メソッドを提供しています。

これはjspページでの私の単純なajax呼び出しです

<script type="text/javascript">
    function addToDo(addToDo) {
        var todo = document.getElementById('toDo').value;

        alert("");

        var adv_name = document.getElementById('advertise_name').value;
        var keywords = document.getElementById('keywords').value;
        var adv_url = document.getElementById('adv_url').value;
        var fileUpload = document.getElementById('fileUpload').value;

        var mediatype= $('#mediatype option:selected').val();

        $.ajax({
            url :addToDo,            
            data: {
                "todo":todo,
                "adv_name":adv_name,
                "mediatype":mediatype,
                "keywords":keywords,
                "adv_url":adv_url,
                "fileUpload":fileUpload,
                "CMD":"addToDo"
            },
            type: "GET",
            timeout: 20000,
            dataType: "text",
            success: function(data) {
                alert(data);
                //when i alert this data..its always null
            }
        });
    }
</script>

以下は私のアップロードコントロールです:

<label>Browse</label>
<input name="fileUpload" id="fileUpload" type="file" />
<span id="restError2" style="color: #C62626;" class="help-block"></span>

1つのボタンで、上記のajaxメソッドを呼び出しており、次のようにリソースサーバーメソッドにリダイレクトします:

@Override
public void serveResource(ResourceRequest request, ResourceResponse response){
    if(request.getParameter("CMD").equals("addToDo")) {
        System.out.println("came here for add");

        // here am converting this resource request to uploadportletrequest because i have enctype="multipart/form-data"
        UploadPortletRequest uploadReq = PortalUtil.getUploadPortletRequest(request);

        sourceFileName = uploadReq.getFileName("fileUpload");// uploaded
        // filename                 

        advertise_name = uploadReq.getParameter("advertise_name"); //this value getting null
        adv_link = uploadReq.getParameter("adv_url"); //this value getting null
        keyword = uploadReq.getParameter("keywords"); //this value getting null
        String resourceID = request.getResourceID();

        System.out.println(resourceID);
    }
}
4

1 に答える 1

1

最初の質問については、この SO answerを参照してください。

2 番目の質問については、パラメーターのプレフィックスが不足していると思います。

したがって、ajax呼び出しを次のように変更してみてください(serveResourceメソッドで言及したフィールドのみをnullに変更しています)

        $.ajax({
        url :addToDo,            
        data: {
            "todo":todo,
            "<portlet:namespace />adv_name":adv_name,
            "mediatype":mediatype,
            "<portlet:namespace />keywords":keywords,
            "<portlet:namespace />adv_url":adv_url,
            "fileUpload":fileUpload,
            "CMD":"addToDo"
        },
        type: "GET",
        timeout: 20000,
        dataType: "text",
        success: function(data) {
            alert(data);
            //when i alert this data..its always null
        }
    });

そして必ず持ってください

<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet" %>

あなたのjspの上に。

また、 serveResource メソッドで持っていることに注意してください

advertise_name = uploadReq.getParameter("advertise_name");

しかし、送信"adv_url":adv_url,、名前に注意してください。

注意すべきもう 1 つの点は、POST の代わりに GET を使用していることです。

さらに、ajax を使用したファイルのアップロードは、すべてのブラウザーでサポートされているわけではありません。サポートされているブラウザのリストについては、こちらを参照してください。

于 2012-11-07T17:40:16.170 に答える