如何在带有 Tiles 的 Struts 2 中隐藏/显示 <div> 使用 JavaScript?

问题描述 投票:0回答:2

我正在开发一个使用 Struts 2 和 Tiles 3 的 JSP 站点,它有不同的选项卡,每个选项卡都显示一个带有表格的

<div>
。我需要添加一个包含 2 个表格的选项卡,并根据按钮显示其中一个或另一个。

是否可以通过JS以某种方式显示/隐藏它们?我已经尝试了一段时间了,Tiles 似乎并不关心我在 JS 中所做的事情。

我一直在使用这个,有一些变化,但到目前为止还没有运气。我对 JS 有点陌生,所以我可能做错了什么,或者 Tiles 有一种方法可以动态/在运行时隐藏/显示我不知道的东西。

document.getElementById('controlPools').style.display='none';
document.getElementById('controlPools').style.display='inline';

controlPools
div
的名称,包含它的图块的名称是
controlPool

这是JSP页面的代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<body>

    <fieldset>
    
        <div id="controlPools">
            <display:table name="lstPools" class="displaytag" id="tablaPools" >
                                                                   
                <display:column style="width: 90%"     >
                    <a href="javascript:getNodosPool('${tablaPools.name}')" >${tablaPools.name}</a>
                </display:column>
                
                <display:column style="width: 10%" property="nodes"/>

            </display:table>
        </div>
        
        <div id="nodosPool" style="display: none;" >
            <display:table name="lstMembers" class="displaytag" id="tablaNodesPool">
                
                <display:column style="width: 5%" >
                            <input type="checkbox" id="${tablaNodesPool.name}"  class="node" value="${tablaNodesPool.name}"  style="margin: 0 0 0 4px"   />             
                         </display:column>  
                         <display:column title="Status CBS" style="width: 10%"> 
                            <div id="iconStatus"  class="${tablaNodesPool.classStatus}" /></div> 
                         </display:column>
                         
                         <display:column title="Status STF" style="width: 10%"> 
                            <div id="iconStatus"  class="${tablaNodesPool.classStatus2}" /></div> 
                         </display:column>
                                                                     
                         <display:column property="name"    />
                         <display:column property="ip"    />
                         <display:column property="description"   />

            </display:table>
            
            <button onclick="enableNodesPool();"  ><s:text name="controlSnmp.enableSelected"/></button>     
            <button onclick="disableNodesPool();" ><s:text name="controlSnmp.disableSelected"/></button>
            <button onclick="getNodosPool();"><s:text name="controlSnmp.buttonRefresh"/></button>
        </div>
        

    </fieldset>
</body>

<script>
  
</script>
javascript html css struts2 tiles
2个回答
1
投票

Tiles 与客户端无关,因此如果您使用 JS 代码执行某些操作,那么您已经在使用 DOM,但此文档可以使用tiles 结果进行渲染。不管怎样,它只会改变你需要修改的正确样式,以使用一些 JS 函数显示/隐藏一些 html 内容

隐藏:

document.getElementById('controlPools').style.display='none';

显示:

document.getElementById('controlPools').style.display='block';

0
投票

@Roman-C 的答案让我思考,它引导我找到了问题的解决方案,部分原因是瓷砖。

我使用这个 JS 块将数据提供给我的 JSP:

document.getElementById('controlPools').style.display='none';
$.ajax({
        type : "GET",
        url  : "ControlNodesPoolAct.action",
        data : {"pool": pool},
        success : function(result){
          if (result != null && result.length > 0){
            var aux = $("#tabs-11"); 
            aux.html(result);
            //inicializamos la tabla con el plugin de jquery
            $('#tablaNodesPool').DataTable(
                    {
                        "lengthMenu": [[150, 75, 10, -1], [150, 75, 10, "All"]]         
                    }           
            );
            spinner.stop();
            document.getElementById('poolLegend').innerHTML=pool;
          }
        },
        error : function(xhr, errmsg) {
            console.log("error en funcion getMiembrosSnmp " + errmsg); 
            spinner.stop();
        }
    });  

显然,由于 DisplayTags 在运行时渲染它,因此在调用函数时 div 不存在,因此我需要等到 DisplayTags 渲染表格才能使 div 存在。我移动了

document.getElementById('controlPools').style.display='none';
到了我知道表格已渲染并且似乎解决了问题的程度。

此更改修复了它:

$.ajax({
        type : "GET",
        url  : "ControlNodesPoolAct.action",
        data : {"pool": pool},
        success : function(result){
          if (result != null && result.length > 0){
            var aux = $("#tabs-11"); 
            aux.html(result);
            //inicializamos la tabla con el plugin de jquery
            $('#tablaNodesPool').DataTable(
                    {
                        "lengthMenu": [[150, 75, 10, -1], [150, 75, 10, "All"]]         
                    }           
            );
            spinner.stop();
            document.getElementById('controlPools').style.display='none';
            document.getElementById('poolLegend').innerHTML=pool;
          }
        },
        error : function(xhr, errmsg) {
            console.log("error en funcion getMiembrosSnmp " + errmsg); 
            spinner.stop();
        }
    });  
© www.soinside.com 2019 - 2024. All rights reserved.