JSP/Struts2:如何访问所选表行中的对象bean
JSP/Struts2: how to access object bean in selected table row
在我的Struts2应用程序中,我有一个表,它是用来自数据库的数据动态填充的(通过Eclipselink JPA)。在该表下面有一个按钮,一旦在表中选择了一行,该按钮就会被启用(jQuery)。现在,当单击该按钮时,我需要知道当前选择了哪一行,这样我就可以访问相应的对象bean,因为我需要将bean ID(target_id
)传递到下一个页面(createexperiment2
操作)。简而言之,问题是:如何访问包含在所选(单击)表行中的Struts2对象bean
1.屏幕截图:
在行选择之前->在行选择之后
2.JSP代码:
<table id="targets" class="ink-table grey tableSection">
<thead>
<tr>
<th colspan="5" class="align-left">Select your target:</th>
</tr>
</thead>
<tbody>
<s:if test="targets.size > 0">
<s:iterator value="targets">
<tr id="row_<s:property value="i"/>">
<td class="all-100"><a href="<s:url action="showtarget"><s:param name="id"><s:property value="target_id"/></s:param></s:url>"><s:property value="name"/></a></td>
<td class="all-15"><a href="<s:url action="edittarget"><s:param name="id"><s:property value="target_id"/></s:param></s:url>">edit</a></td>
<td class="all-5">|</td>
<td class="all-15"><a href="<s:url action="deletetarget"><s:param name="id"><s:property value="target_id"/></s:param></s:url>">delete</a></td>
<td class="all-5"><a href="help.jsp">?</a></td>
</tr>
</s:iterator>
</s:if>
</tbody>
</table>
[…]
<a href="createexperiment2" class="ink-button double-vertical-space all-25 buttonSection" id="next" disabled>Next ></a>
3.j查询代码:
$(document).ready(function(){
$('.tableSection tbody tr').click(function()
{
var selected = $(this).hasClass("highlight");
$('.tableSection tbody tr').removeClass("highlight");
$('.buttonSection').attr("disabled", false);
if(!selected)
$(this).addClass("highlight");
});
});
编辑1:
在Andrea的帮助下,我终于能够使用jQuery访问Struts2函数,问题是我只能访问表上最后一个bean的属性(在呈现JSP时访问的最后一个bean,这是有道理的)。请参阅下面的更新代码,同时我将尝试一个解决方法:
JSP:
<s:if test="targets.size > 0">
<s:iterator value="targets">
<tr onclick="<s:set var="tid" value="target_id"/>">
[…]
</tr>
</s:iterator>
</s:if>
[…]
<script type="text/javascript">
$(function () {
$('.tableSection tbody tr').click(function(event) {
alert ('<s:property value="%{#tid}" />');
});
});
</script>
编辑2:
现在我知道点击了哪个表行索引,但经过数小时的尝试(使用Struts标记)将其分配给一个变量并发送给操作,我仍然没有得到我想要的。我甚至无法将此行索引发送到Action。这令人沮丧。尽管如此,这就是我如何知道哪一行被选中的原因:
<tr onclick="getRow(this)">
[…]
<script>
function getRow(x)
{
alert("Selected row: "+x.rowIndex);
//return x.rowIndex;
}
</script>
编辑3:
这一次,我终于能够将行ID(一个字符串)发送到操作。唯一剩下的问题是,该操作被调用了两次,第一次是在单击事件上,另一次是因为a
HTML元素的href
属性,该属性重定向到所需的Struts2操作。除了明显不足之外,这自然会使变量在第二次调用操作时变为null。你知道我怎么能把这两个对createxperiment2
动作的调用"合并"成一个吗?我尝试过将AJAX调用中的async
选项设置为false,但没有成功。
[首先,从表tr
中删除了onclick
事件,因为我只需要知道按下"下一步"按钮时高亮显示的是哪一行]。目前的代码如下:
<script type="text/javascript">
$('#next').click(function(event)
{
var row = $('.highlight').index();
alert (row);
$.ajax({
method: "POST",
url: "createexperiment2.action",
data: { row : row }
});
});
</script>
Q: 我为每一行表分配了一个ID。我怎么知道哪一个是被选中的?
使用this
关键字获取对象的id:
$('.tableSection tbody tr').click(function(event) {
alert (this.id);
...
Q: 如何使用选定的表行ID来访问相应的bean对象(在行本身中表示)?
这还不清楚:只需提交id
并检索对象服务器端,无论是通过AJAX还是标准表单提交。
最后,解决方案:
首先获取对象的ID(我是用Struts创建的)。然后,在AJAX调用的帮助下,将ID发送到所需的操作(url:
属性)。此操作成功后,使用success:
回调选项定义要重定向的位置。
Struts/JSP:
<s:if test="targets.size > 0">
<s:iterator value="targets">
<tr id="<s:property value="target_id"/>" class="highlight">
[...]
</tr>
</s:iterator>
</s:if>
jQuery:
<script type="text/javascript">
$('#next').click(function(event)
{
var tid = $('.highlight').attr("id");
$.ajax({
method: "POST",
url: "createexperiment2.action",
data: { tid : tid },
success:
function()
{
//alert("TID -> "+tid);
window.location = "loadworkloads.action";
}
});
});
</script>
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 使用jstl c:forEach在迭代jsp bean上创建javascript json对象
- 使用 Bean 对象中的 JSON 构造数组
- JSP/Struts2:如何访问所选表行中的对象bean