我正在开发一个使用 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>
Tiles 与客户端无关,因此如果您使用 JS 代码执行某些操作,那么您已经在使用 DOM,但此文档可以使用tiles 结果进行渲染。不管怎样,它只会改变你需要修改的正确样式,以使用一些 JS 函数显示/隐藏一些 html 内容
隐藏:
document.getElementById('controlPools').style.display='none';
显示:
document.getElementById('controlPools').style.display='block';
@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();
}
});