2

カスタムポートレットを開発していますが、ビューページの1つでヘルプが必要です。

以下は、すべての行にチェックボックスがあり、各行が実行時に(動的に)作成されるフォームです。

<form method="post" name="editform">
   <table class="table table-bordered table-striped" id="dt_gal_res">
      <thead>
         <tr>
            <th class="table_checkbox"><input type="checkbox"
                    name="select_rows" class="select_rows"
                    data-tableid="dt_gal_rest" /></th>
            <th>Name</th>
            <th>Contact Person</th>
            <th>Website</th>
            <th>EDIT</th>
            <th>DELETE</th>
          </tr>
      </thead>

 <%
       List<restaurant> rest_listOBJ = restaurantLocalServiceUtil.getAllAvailableRestaurant();

       for (int i = 0; i < (rest_listOBJ.size()); i++) {
                restaurant temprest = rest_listOBJ.get(i);
  %>

     <tbody>
         <tr>
            <td><input type="checkbox" name="row_sel" class="row_sel" /></td>
            <td><%=temprest.getName() %></td>
            <td><%=temprest.getContactno() %></td>
            <td><%=temprest.getWebsite() %></td>
            <td>
                <input type="submit" id="1" value="edit"
                            onclick="return getbuttonId('<%=temprest.getPrimaryKey() %>')" />
            </td>
            <td>
                <input type="submit" id="2" value="DELETE"
                            onclick="return getdeletebuttonId('<%=temprest.getPrimaryKey() %>')" />
                </td>
        </tr>
     </tbody>
        <%
            }
        %>
</table>

    <div style="visibility: hidden;">
        <input type="hidden" name="hide1" id="hiddenkey" value="">
    </div>
</form>

現在、削除ボタンがあり、他のロジックによって行を1つずつ削除しています。
しかし、今私が欲しいのは、行のチェックボックスを選択した後、1つのボタンを送信するときに1つ以上のチェックボックスを選択し、その1つのボタンをクリックすると、チェックボックスが選択されているすべての行を削除したいということです。

どういうわけか、ポートレットクラスのアクションメソッドで選択したチェックボックスリストのリストを取得する方法を誰かに教えてもらえれば、それでも十分です。

私はjspを初めて使用するので、何かアイデアがあれば教えてください。

u guyzが提案したように、私は同じ方法を実行しましたが、成功しませんでした。ここで間違っているのは私のアクションクラスです。

public void deleteMultipleRestaurant(ActionRequest ar, ActionResponse ap)
            throws Exception {

        log.info("ENTERED");
        List<restaurant> restaurants = restaurantLocalServiceUtil.getAllAvailableRestaurant();



        for (restaurant restaurantitem : restaurants) {        
            if (Boolean.valueOf(ar.getParameter("row_sel" + restaurantitem.getPrimaryKey()))) {
               // This is a selected checkbox so add you remove code here

                log.info(restaurantitem);

                restaurantitem.setIsdeleted(true);
                restaurantLocalServiceUtil.updaterestaurant(restaurantitem);


            }
        }
    }

私のビューファイルでは次のようにしています

これは私のulの1つですこれは私の削除リンクがあります

<portlet:actionURL name="deleteMultipleRestaurant"
                        var="multideleteURL">
                    </portlet:actionURL>

                    <button data-toggle="dropdown" class="btn dropdown-toggle">
                        Action <span class="caret"></span>
                    </button>
                    <ul class="dropdown-menu">                          
                        <li><aui:button name="DELETE" value="DELETE" onClick="<%=multideleteURL.toString() %>"/></li>                           
                        <li><a href="javascript:void(0)">Lorem ipsum</a></li>
                        <li><a href="javascript:void(0)">Lorem ipsum</a></li>
                    </ul>

以下は表示ページです

<tbody>
                                <%
                                    List<restaurant> rest_listOBJ = restaurantLocalServiceUtil
                                                                    .getAllAvailableRestaurant();

                                                              for (int i = 0; i < (rest_listOBJ.size()); i++) {

                                                                restaurant temprest = rest_listOBJ.get(i);
        %>

<tr>                                            
      <td><input type="checkbox" id="row_sel<%= temprest.getPrimaryKey() %>" name="<portlet:namespace/>row_sel<%= temprest.getPrimaryKey() %>" class="row_sel" />
      </td>

    <td><%=temprest.getName()%></td>
    <td><%=temprest.getContactno()%></td>
    <td><%=temprest.getWebsite()%></td>
    <td><input type="button" id="1"
                                            onclick="return getbuttonId('<%=temprest.getPrimaryKey()%>')"
                                            style="border:none;width:20px" class="icon-pencil"/>
                                        <input type="button" id="2"
                                            onclick="return getdeletebuttonId('<%=temprest.getPrimaryKey()%>')"
                                            style="border:none;width:20px" class="icon-trash" /></td>
                                    </tr>                               
                                <%
                                    }
                                %>
                            </tbody>

しかし、何も得られていません。ページをリロードするだけです。

4

3 に答える 3

4

今あなたはやっています:

  1. メソッドにシングルIdを送信するprocessAction
  2. ボタンに基づいてアクションを実行する、editまたはdelete

あなたが欲しい:

  1. 複数のチェックボックスを選択します
  2. Deleteどこかのボタンをクリック
  3. 選択したすべてのアイテムが削除されます

解決策(他にも多くの方法があるかもしれません):

  1. チェックボックスは次のようになります。

    <input type="checkbox" name="<portlet:namespace/>row_sel" class="row_sel" value="<%=temprest.getPrimaryKey() %>" />
    

    タグを使用する場合は、属性<aui:input />の前にわざわざ追加する必要はありません。name<portlet:namespace/>

  2. Idカンマ区切り形式で非表示の入力フィールドにすべてのを収集<input type="hidden" name="<portlet:namespace/>allCheckedIds" />し、サーバーに送信します。

  3. これは、javascriptを使用して実行できます。ボタンをクリックすると、チェックボックスの値からDeleteすべての文字列を作成するjavascriptメソッドが呼び出されます。このリンクを利用して、javascriptメソッドを作成Idできます。
  4. 次にsubmitformjavascriptメソッド自体の助けを借りて。
  5. 次に、メソッドで、次のように受け取ったコンマ区切りの文字列からsをprocessAction区切ることができます。Id

    String allIds = ParamUtil.getString(actionRequest, "allCheckedIds");
    //allIds = "1,2,3,4,5,6"; // this is how the Ids might look
    long[] idArray = StringUtil.split(allIds, ",", 0); // were 0 is the default value
    
  6. 次に、これらのIDをサービスレイヤーに渡して削除します。

それでおしまい。簡単ですね。

liferayで使用される同様の方法もあります。これについては、Document Library Displayポートレットを確認できます。リストを表示するために使用する場合<liferay-ui:searchContainer>は、liferayがこれを行う方法を利用できます。

この方向にいくつかのポインタを提供します。ソースを確認できます。 、チェックボックスを作成する
view_file_entries.jspf行を確認してから、 [実際にリクエストをアクションクラスに送信するjavascriptメソッドを確認してください。チェックアウトできるjspsとアクションクラスがありますが、それはあなた次第です。:-)rowChecker="<%= entriesChecker %>"'<portlet:namespace />deleteEntries'][4],

幸せな探検。

于 2012-11-01T09:11:35.970 に答える
4

私はそれがこの単純な方法で行われたことを知りませんでした。私が間違っている場合は私を訂正してください。次のコードで問題を解決しました。

<td><input type="checkbox" name="row_sel" class="row_sel" /></td>

そして私の行動方法では

String[] camp_id = request.getParameterValues("row_sel");
// boolean booln = false;

for(String camp_iditem:camp_id){ ... }

そしてそれは私にcamp_iditem変数のチェックされたボタンの値を与えるだけです。

やりたいことができました。私が間違っている場合は私を訂正してください?

ご指導ありがとうございました。

于 2012-11-02T10:11:34.950 に答える
2

最初に行う必要があるのは、name属性を変更し、チェックボックスにid属性を追加することです。したがって、これを使用する代わりに:

<td><input type="checkbox" name="row_sel" class="row_sel" /></td>

次のようなものが必要です。

<td><input type="checkbox" id="row_sel<%= temprest.getPrimaryKey() %>" name="<portlet:namespace/>row_sel<%= temprest.getPrimaryKey() %>" class="row_sel" /></td>

これにより、各チェックボックスをprocessActionメソッドで一意に識別できるようになります。

次に、プロセスアクションメソッドで、次のロジックを使用して、チェックボックスが選択されているかどうかを確認できます。

List<Restaurant> restaurants = RestaurantLocalServiceUtil.getAllAvailableRestaurant();

for (Restaurant restaurant : restaurants) {        
    if (Boolean.valueOf(actionRequest.getParameter("row_sel" + restaurant.getPrimaryKey())) {
       // This is a selected checkbox so add you remove code here
    }
}

それは大まかな方法​​であなたのためにトリックをするはずです!

また、この回答(または質問の1つに対する他の回答)が役立つ場合は、その回答を「受け入れ」てコミュニティを支援し、時間をかけて支援してくれている人々に感謝してください。

~~編集~~

また、Olafが以下に述べているように、<form>タグは次のようになります。

<form method="post" name="editform" action="<portlet:actionURL/>">

~~編集02/11/12~~

次のコードを使用して、Actionメソッドに渡されるすべてのパラメーターとその値を確認できます。

for (String key : actionRequest.getParameterMap().keySet()) {
    log.info("Param " + key + " has value: " + actionRequest.getParameter(key));
}
于 2012-11-01T08:18:18.947 に答える