JSP / Struts2:如何在选定的表行中访问对象bean

时间:2015-03-04 16:04:58

标签: javascript jsp struts2

在我的Struts2应用程序中,我有一个动态填充数据的表,来自数据库(通过Eclipselink JPA)。在该表下方有一个按钮,只要在表(jQuery)中选择了一行就会启用该按钮。现在,当单击该按钮时,我需要知道当前选择了哪一行,因此我可以访问相应的对象bean,因为我需要将bean ID(target_id)传递到下一页({{1行动)。简而言之,问题是:如何访问所选(单击)表行中包含的Struts2对象bean?

1。屏幕截图:

Before row selection - > After row selection

2。 JSP代码:

createexperiment2

[...]

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

第3。 jQuery代码:

<a href="createexperiment2" class="ink-button double-vertical-space all-25 buttonSection" id="next" disabled>Next &gt;</a>

编辑1:

在Andrea的帮助下,我终于能够使用jQuery访问Struts2函数了,问题是我只能访问表中最后一个bean的属性(当JSP被访问时最后一个bean的属性)渲染,这是有道理的)。请参阅下面的更新代码,我将尝试解决此问题:

JSP:

$(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");
    });
});

[...]

<s:if test="targets.size > 0">
    <s:iterator value="targets">
        <tr onclick="<s:set var="tid" value="target_id"/>">

[...]

        </tr>
    </s:iterator>
</s:if>

编辑2:

现在我知道单击了哪个表行索引,但是在尝试将其分配给变量(使用Struts标记)并将其发送到操作后数小时,我仍然没有得到我想要的内容。我甚至无法将此行索引发送到Action。这令人沮丧。然而,这就是我如何知道选择了哪一行:

<script type="text/javascript">
    $(function () {
        $('.tableSection tbody tr').click(function(event) {
            alert ('<s:property value="%{#tid}" />');
        });
    });
</script>

[...]

<tr onclick="getRow(this)">

编辑3:

这一次,我终于能够将行ID(字符串)发送到操作。唯一剩下的问题是该操作被调用两次,第一次调用click事件,另一个调用因为<script> function getRow(x) { alert("Selected row: "+x.rowIndex); //return x.rowIndex; } </script> HTML元素的href属性,重定向到所需的Struts2操作。除了明显不合理之外,这自然会使变量在第二次调用时变为null。你知道我怎么能将这两个a动作的“调用”合并为一个?我尝试将AJAX调用中的createxperiment2选项设置为false,但没有成功。

[首先,从表async中删除了onclick事件,因为我只需要知道按下“下一步”按钮时哪一行突出显示。代码目前是这样的:

tr

2 个答案:

答案 0 :(得分:1)

  

问:我已为每个表格行分配了一个ID。我怎么知道哪一个是被选中的?

使用this关键字获取对象的ID:

$('.tableSection tbody tr').click(function(event) {
    alert (this.id);
    ...
  

问:如何使用选定的表行ID访问相应的bean对象(在行本身中表示)?

目前尚不清楚:只需提交您的id并检索对象服务器端,无论是通过AJAX还是标准表单提交。

答案 1 :(得分:0)

最后,解决方案:

首先获取对象的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>