我正在开发自定义portlet,在我的一个视图页面中,我需要一些帮助。
以下是我的表格,其中每行都有复选框,每行都会在运行时创建(动态):
<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很新,所以任何有任何想法的人都请建议我。
正如你的家伙所说,我已经采取了同样的方式。但是没有取得任何成功。请纠正我这里的错误是我的行动类
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>
但没有得到......只是重新加载页面..正好是数据
答案 0 :(得分:4)
现在你在做:
Id
发送到processAction
方法edit
或delete
你想:
Delete
按钮解决方案(可能还有很多其他方法):
你的复选框应该是这样的:
<input type="checkbox" name="<portlet:namespace/>row_sel" class="row_sel" value="<%=temprest.getPrimaryKey() %>" />
如果您使用<aui:input />
代码,则不必费心将name
属性添加到<portlet:namespace/>
以逗号分隔格式收集隐藏输入字段Id
中的所有<input type="hidden" name="<portlet:namespace/>allCheckedIds" />
,然后将其发送到服务器。
Delete
按钮调用javascript方法,该方法将从已检查的复选框的值构造所有Id
s的字符串。您可以获取this link的帮助来构建javascript方法。submit
form
。然后在您的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
现在将这些ID传递给服务层以删除它们。
就是这样。简单不是。
liferay使用了类似的方法,您可以检查Document Library Display
portlet。如果您使用<liferay-ui:searchContainer>
来显示您的列表,那么您可以利用liferay为您做到这一点。
我将在这方面提供一些指示,你可以查看来源:
view_file_entries.jspf
,请查看rowChecker="<%= entriesChecker %>"
行,为您创建复选框,然后签出实际将请求发送到操作类的['<portlet:namespace />deleteEntries'][4],
javascript方法。有jsps和行动课你可以退房,但我会告诉你去探索。 : - )
快乐探索。
答案 1 :(得分:3)
我不知道它是以这种简单的方式完成的。如果我错了,请纠正我。我刚用以下代码解决了我的问题:
<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
变量中的选中按钮的值。
我得到了我想做的事。如果我做错了,请纠正我?
感谢所有人的指导......
答案 2 :(得分: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
}
}
那应该以粗暴的方式帮助你!
此外,如果这个答案(或您的一个问题的任何其他答案)对您有帮助,请“接受”该答案以帮助社区,并确认那些花时间帮助您的人。
~~编辑~~
正如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));
}