我正在开发自定义 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>
但什么也没有得到..它只是重新加载页面..只是数据
最佳答案
现在你在做:
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
s 在隐藏的输入字段中 <input type="hidden" name="<portlet:namespace/>allCheckedIds" />
以逗号分隔的格式,然后将其发送到服务器。
Delete
按钮调用一个 javascript 方法,该方法将构造所有 Id
的字符串s 来自选中的复选框的值。你可以求助this link构造 javascript 方法。submit
form
借助 javascript 方法本身。然后在你的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 %>"
whick 为您创建复选框,然后 checkout [ '<portlet:namespace />deleteEntries'][4],
实际上将请求发送到操作类的 javascript 方法。您可以查看 jsps 和操作类,但我将由您自行探索。 :-)
探索愉快。
关于jsp - 如何从 jsp 页面获取选定行的列表或选定复选框的列表到 liferay 6 中 portlet 的操作类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13159508/