代码之家  ›  专栏  ›  技术社区  ›  riddle_me_this He Drunh

在DisplayTag中创建下拉行

  •  0
  • riddle_me_this He Drunh  · 技术社区  · 14 年前

    我目前正在为表格数据使用displaytag,但我想创建一个“kayak.com-like”界面,当用户单击一行时,将显示有关特定行的详细信息,而不刷新页面。

    例如,在单击第1行的详细信息链接之前:

    第1列第1列第2列第3列第4列详细信息
    第2列第1列第2列第3列第4列详细信息
    第3列第1列第2列第3列第4列详细信息

    单击后:

    第1列第1列第2列第3列第4列详细信息
    --------第1行详细信息-----------
    第2列第1列第2列第3列第4列详细信息
    第3列第1列第2列第3列第4列详细信息

    我尝试使用一个装饰器返回可以实现此目的的javascript。将执行javascript,但它只反映在呈现它的列中。我希望插入一个数据不影响displaytag分页和排序的新行。

    例如。:

    public class CustomDecorator extends TableDecorator {
       public String getDetailsRow() {
          MyObject object = (MyObject)this.getCurrentRowObject();
          return "<a onClick=\"myjsfunction(object.getId()); return true\">Details</a>";
       }
    }
    

    …在JSP中,我将在display:table标记之间嵌套一个detailsRow属性:

    <display:column property="detailsRow" sortable="false" />
    

    有什么关于如何正确插入新行的提示吗?解决方案可能是以编写JavaScript的方式——我不是JavaScript的专家,因此任何提示都会受到赞赏。有没有更好的方法来处理displaytag?我也不知道displaytag与javascript有任何明确的集成(比如“onclick”参数)。

    这是我关于stackoverflow的第一个问题,顺便说一句,请告诉我您是否需要更多的细节。

    2 回复  |  直到 14 年前
        1
  •  1
  •   jmo    14 年前

    很抱歉,拖上一个旧问题,但这里有一个可能的解决方案,以防任何人遇到这个问题。 覆盖时 TableDecorator ,覆盖 finishRow 方法返回详细信息行。此方法将在表中写入每一行后运行,因此对于每一实行,都将有一个隐藏行,其中包含详细信息

    public String finishRow() {
       return "<tr id='row1Details' style='visibility: collapse'><td colspan='500'>My Details</td></tr>";
    }
    

    然后在详细信息列中使用一些javascript将隐藏行设置为可见。

    编辑: 其他详细信息:

    添加新的javascript函数

    function displayDetails(id) {
       document.getElementById(id + 'details').style.visibility = 'visible'
    }
    

    然后,您的正常行看起来像:

    <tr id='row1'><td> .... </td><td><a href="#" onClick="displayDetails('row1')">Details</a></td></tr>
    
        2
  •  0
  •   BradBrening    14 年前

    我不确定这是否有帮助,但我是 DataTables.net . 它以jquery为基础,但功能非常强大。

    他们有一个听起来很像你想要的例子: Row Details