jsp - 如何从 jsp 页面获取选定行的列表或选定复选框的列表到 liferay 6 中 por

我正在开发自定义 portlet,在我的一个 View 页面中我需要一些帮助。

以下是我的表单,其中每一行都有复选框,每一行都将在运行时(动态)创建:

<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>

现在我有删除按钮,根据其他一些逻辑,我正在逐行删除。
但是现在我想要的是,在选择了一个或多个复选框的行的复选框之后 我提交一个按钮,然后单击该按钮我想删除所有选中复选框的行。

不知何故,如果有人能指导我如何在 portlet 类的操作方法中获取选中的复选框列表,那么即使这样对我来说也足够了。

我对 jsp 很陌生,所以有任何想法的人请给我建议。

正如你 guyz 所建议的那样,我也这样做了。但没有取得任何成功。请纠正我哪里错了,这是我的 Action 类

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 之一,我的删除链接在那里

<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>

但什么也没有得到..它只是重新加载页面..只是数据

最佳答案

现在你在做:

  1. 发送单IdprocessAction方法
  2. 执行基于按钮的 Action editdelete

你想要:

  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 s 在隐藏的输入字段中 <input type="hidden" name="<portlet:namespace/>allCheckedIds" />以逗号分隔的格式,然后将其发送到服务器。

  3. 这可以使用 javascript 完成,点击 Delete按钮调用一个 javascript 方法,该方法将构造所有 Id 的字符串s 来自选中的复选框的值。你可以求助this link构造 javascript 方法。
  4. 然后 submit form借助 javascript 方法本身。
  5. 然后在你的processAction方法你可以分开Id s 来自收到的以逗号分隔的字符串:

    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为此的 portlet。如果你使用 <liferay-ui:searchContainer>显示您的列表,然后您可以利用 liferay 如何为您做这件事。

我会在这方面提供一些指导,您可以查看来源:
view_file_entries.jspf , 检查行 rowChecker="<%= entriesChecker %>" whick 为您创建复选框,然后 checkout [ '<portlet:namespace />deleteEntries'][4],实际上将请求发送到操作类的 javascript 方法。您可以查看 jsps 和操作类,但我将由您自行探索。 :-)

探索愉快。

关于jsp - 如何从 jsp 页面获取选定行的列表或选定复选框的列表到 liferay 6 中 portlet 的操作类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13159508/

相关文章:

php - 使用单个命中的唯一文档 ID 通过 Amazon CloudSearch 搜索数据

.net - 如何避免评估所有 'iif' 表达式?

vba - 如何获取表单的最后一条记录ID?

awk - 如何删除文本文件中的重复单词

sql - DB2 中的意外标记 "LIMIT"

php - 为什么 PhpStorm 检查说 `Exception` 未定义?

php - 如何使用php删除重复的字母

php - 在 Symfony 中禁用错误​​页面

.net - Vb.net 仅从带整数的字符串中获取整数

delphi - 如何在 Delphi XE3 中将 String 转换为 LongInt?