Apache Tiles在Java Servlet容器中呈现动态网站。
我在将 Struts 从 2.3 迁移到 2.5 时遇到了一些问题。 我在我的应用程序中使用了 Tiles。以下是错误: 严重:部署 Web 应用程序存档时出错 java.lang.
我在将 Struts 从 2.3 迁移到 2.5 时遇到了一些问题。 我在我的应用程序中使用了 Tiles。下面是错误: 严重:部署 Web 应用程序存档时出错 java.lang.
如何将列表作为参数从一个 JSP 传递到 Struts 2 中包含的 JSP?
想象一下,您希望下面的 JSP 代码片段位于多个页面中,唯一不同的是传递给它的列表(示例中的 xxx)。 想象一下,您希望下面的 JSP 代码片段位于多个页面中,唯一不同的是传递给它的列表(示例中的 xxx)。 <s:iterator value="%{#xxx}" var="module" status="stat"> <s:property value="#module.name"/> </s:iterator> 我的第一个想法是将其放在 myFragment.jsp 中,并在其他页面中使用 <s:include> 来包含它,并将列表作为 <s:param> 传递,例如: <s:include value="/myFragment.jsp"> <s:param name="xxx" value="%{#myModules}"></s:param> </s:include> 问题是<s:param>似乎只传递字符串,所以上面的代码不起作用。 我也尝试过使用 <s:set var="myParam">${param.xxx}</s:set> (并尝试将 myParam 放入迭代器中,但没有成功。 问题: 正确的方法是什么? 对于这种情况,您希望通过将公共代码重构到统一位置来消除 JSP 中的重复代码,是否有更优雅的解决方案? 编辑(示例): 例如,您有 Page1.jsp 和 Page2.jsp。两者都使用非常相似的 <s:iterator>,唯一的区别是传递给它的变量。目标是将 <s:iterator> 重构到某个地方,这样你就只写一次。 当然,在现实生活中,需要重构的代码不仅仅是<s:iterator>。 Page1.jsp: <s:action name="MyAction" var="xxx"></s:action> <s:iterator value="%{#xxx}" var="module" status="stat"> <s:property value="#module.name"/> </s:iterator> Page2.jsp: <s:iterator value="%{#variableFromStack.modules}" var="module" status="stat"> <s:property value="#module.name"/> </s:iterator> 我认为没有任何理由将参数传递给 s:include 标签。请注意,参数只能作为请求参数来访问: 参数作为请求参数传递,因此请使用 ${param.ParamName} 表示法来访问它们。请勿使用 s:property 标签访问包含文件中的参数。 正确的做法是在valueStack上推送参数。 优雅的解决方案是使用 Tiles 框架。 Tiles 是一个模板框架,旨在轻松创建具有一致外观和感觉的 Web 应用程序页面。它可以用于页面装饰和组件化。 有 Tiles 2 和 Tiles 3 集成插件。
错误org.apache.tiles.TilesException:找不到属性
我正在开发一个 Web 项目,我使用 Tiles 在一个 JSP 中包含多个 JSP。 我遇到了一个问题,出现 TilesIOException。 我有这个 JSP,名称为:mainpage.jsp,其中包含...
如何克服配置 org.apache.struts2.tiles.StrutsTilesListener 类的应用程序侦听器时出错
我的 Eclipse 上运行着两个项目。我可以运行其中一个项目,但是如果我尝试运行第二个项目,则会收到错误: 配置 org.apache 类的应用程序侦听器时出错。
如何在带有 Tiles 的 Struts 2 中隐藏/显示 <div> 使用 JavaScript?
我正在开发一个使用 Struts 2 和 Tiles 3 的 JSP 站点,它有不同的选项卡,每个选项卡都显示一个带有表格的 。我需要添加一个包含 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> 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(); } });
是否可以将基本类型(如布尔值)作为属性? pageContext.setAttribute("boolValue", boolValue); 进而 是否可以将基本类型(如布尔值)作为属性? pageContext.setAttribute("boolValue", boolValue); 然后 <tiles:put name="boolValue" beanName="boolValue" type="boolean" /> 在我使用的其他Jsp中: <tiles:useAttribute name="boolValue" id="boolValue" classname="boolean" /> 我收到此错误: PWC6199: Generated servlet error: string:///BaseBudgetLayout_jsp.java:124: incompatible types found : <nulltype> required: boolean PWC6199: Generated servlet error: string:///BaseBudgetLayout_jsp.java:125: inconvertible types found : java.lang.Object required: boolean 属性映射不能将基元作为值。鉴于需要 java.lang.Object,Java 5 自动装箱会默默地将 boolean 原语转换为 java.lang.Boolean 实例。从技术上讲,这根本不是 boolean,因此 Tiles 标签中的类型/类名将不匹配。 相反,使用 <tiles:put name="boolValue" beanName="boolValue" type="java.lang.Boolean" /> 和 <tiles:useAttribute name="boolValue" id="boolValue" classname="java.lang.Boolean" />
apachetiles的tiles定义我们是否可以使用https?
下面是我的tiles.xml 文件之一的示例代码 下面是我的一个tiles.xml 文件中的示例代码 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" "http://tiles.apache.org/dtds/tiles-config_2_1.dtd"> <tiles-definitions> 这里如果你注意到了,url 以 http:// 开头,即使在官方文档中,示例也是这样写的。 https://tiles.apache.org/framework/tutorial/basic/pages.html 现在的问题是我正在使用 Tomcat9 和 Liferay 7.4 版本。在生产中的 tomcat 服务器中,我需要禁用来自端口 80 的所有流量(入站 + 出站)。一旦我这样做,在运行时在我的应用程序中,我会收到以下错误 ERROR com.liferay.portletmvc4spring.DispatcherPortlet - Could not complete request org.apache.tiles.definition.DefinitionsFactoryException: I/O Error reading definitions. at org.apache.tiles.definition.digester.DigesterDefinitionsReader.read(DigesterDefinitionsReader.java:331) ~[tiles-core-3.0.8.jar:3.0.8] at org.apache.tiles.definition.dao.BaseLocaleUrlDefinitionDAO.loadDefinitionsFromResource(BaseLocaleUrlDefinitionDAO.java:150) ~[tiles-core-3.0.8.jar:3.0.8] at org.apache.tiles.definition.dao.CachingLocaleUrlDefinitionDAO.loadRawDefinitionsFromResources(CachingLocaleUrlDefinitionDAO.java:239) ~[tiles-core-3.0.8.jar:3.0.8] at org.apache.tiles.definition.dao.CachingLocaleUrlDefinitionDAO.loadRawDefinitionsFromResources(CachingLocaleUrlDefinitionDAO.java:230) ~[tiles-core-3.0.8.jar:3.0.8] at org.apache.tiles.definition.dao.CachingLocaleUrlDefinitionDAO.loadRawDefinitionsFromResources(CachingLocaleUrlDefinitionDAO.java:230) ~[tiles-core-3.0.8.jar:3.0.8] at org.apache.tiles.definition.dao.CachingLocaleUrlDefinitionDAO.loadDefinitionsFromResources(CachingLocaleUrlDefinitionDAO.java:208) ~[tiles-core-3.0.8.jar:3.0.8] at org.apache.tiles.definition.dao.CachingLocaleUrlDefinitionDAO.loadDefinitions(CachingLocaleUrlDefinitionDAO.java:197) ~[tiles-core-3.0.8.jar:3.0.8] at org.apache.tiles.definition.dao.ResolvingLocaleUrlDefinitionDAO.loadDefinitions(ResolvingLocaleUrlDefinitionDAO.java:68) ~[tiles-core-3.0.8.jar:3.0.8] 我在想,当应用程序加载JSP时,tomcat试图从这个url动态下载定义文件,当时,由于端口80被阻止,它给出了这个异常。 所以,我的问题是 如果在文档本身中,处理此问题的优雅方法是什么 提到了http://? 如果是这种情况,为什么不是所有人都面临类似的问题? Apache Tiles 2.1 是一个古老的版本,整个 Tiles 项目自 2018 年起就已退役。也许他们从未实现过 XML 外部实体 漏洞预防。我建议迁移到一些较新的框架和支持的框架。 同时,您可以将 DTD 文件下载到您的项目中,并使用本地 URL(而不是远程 URL)引用它。 另一个选项是将 URL 更改为 HTTPS:https://tiles.apache.org/dtds/tiles-config_2_1.dtd,目前正在运行。至少在 Apache 基金会没有关闭该网站的情况下是这样。您不能依赖永远在线的外部资源,特别是对于已退役的项目。
在锁屏上长按 Android(sdk >= 33)中的快速设置图块,无需解锁
我想在锁定屏幕上显示覆盖活动,而无需在长按应用程序快速设置图块时输入密码。这是我的代码: 我想在锁定屏幕上显示覆盖活动,而无需在长按应用程序快速设置图块时输入密码。这是我的代码: <activity android:name=".PopupActivity" android:excludeFromRecents="true" android:launchMode="singleInstance" android:taskAffinity="" android:theme="@style/TransparentDialogTheme" android:exported="true" android:showOnLockScreen="true"> <intent-filter> <action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES"/> </intent-filter> </activity> 当我长按图块时,它会要求输入密码。你有什么想法吗? 我还成功在锁屏上显示了我的叠加层,但无法从快速图块中启动它。 如果不可能,我将不得不寻找锁屏底部按钮小部件,因为 sdk 34 允许自定义,但如果我可以保留 sdk 33 支持,那就太好了。 谢谢你 你想通了吗?
所以我正在unity游戏中制作一个2D平台运行游戏,目前我制作了一些Tilemaps,它们是平台部分,然后是预制件,然后我尝试生成平台,但是当我...
Struts2tiles插件和子文件夹中的tiles配置文件问题
正如发行说明所述: 该版本通过直接复制库的源代码来嵌入 Apache Tiles。 Apache Tiles 项目已经退休,现在它在阁楼上 - 没有开发...
我的欢迎页面是 web.xml 文件中列出的welcome.jsp welcome.jsp 包含一个简单的表单,用于提交到由 struts-config.xml 文件映射的操作 所有映射都是正确的...
我开始集成acore API和tiles库以实现统一,但我按照构建API密钥的步骤进行操作,但它在统一中对我不起作用。 返回以下错误: 错误
我正在创建一个 Struts-tiles 项目,具有以下基本细节
(1)我的欢迎页面是web.xml文件中列出的welcome.jsp (2)welcome.jsp 包含一个简单的表单,用于提交到由 struts-config.xml 文件映射的操作 (3)所有映射都是正确的...
我有一个问题,我的导航栏不适合整个页面,如下所示: 它发生在我实现 Apache Tiles 进行模板化之后 我的menu.jsp是: ... 我有一个问题,我的导航栏不适合整个页面,如下所示: 它发生在我实现 Apache Tiles 进行模板化之后 我的menu.jsp是: <nav class="navbar navbar-inverse"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="#">Spring Boot</a> </div> <div id="navbar" class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li class="active"><a href="/flight_information_display">Home</a></li> <li><a href="/flight_information_display/about">About</a></li> </ul> </div> </div> </nav> 为什么导航栏不适合整个页面? 我还使用 Apache Tiles 进行模板化,我的布局是: <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <html> <head> <title><tiles:getAsString name="title" /></title> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <link rel="stylesheet" type="text/css" href="webjars/bootstrap/3.3.7/css/bootstrap.min.css" /> <!-- <spring:url value="/css/main.css" var="springCss" /> <link href="${springCss}" rel="stylesheet" /> --> <c:url value="/css/main.css" var="jstlCss" /> <link href="${jstlCss}" rel="stylesheet" /> </head> <body> <table> <tr> <td> <tiles:insertAttribute name="menu" /> </td> </tr> <tr> <td> <tiles:insertAttribute name="header" /> </td> </tr> <tr> <td> <tiles:insertAttribute name="body" /> </td> </tr> <tr> <td> <tiles:insertAttribute name="footer" /> </td> </tr> </table> </body> 主.css h1{ color:#0000FF; } h2{ color:#FF0000; } 如果您需要提供任何其他代码,请告诉我。 非常感谢提前 我怀疑以下内容: /css/main.css or <link href="${jstlCss}" rel="stylesheet" /> 将所有内容拉到左侧:当您使用“容器”类时,您的菜单栏+导航应显示在中间,并在两侧进行填充。看起来内边距是正确的,但页面被向左拉了。 注意:container-fluid,导致布局没有这种集中布局,有padding。 你的问题在于其他CSS(main.css或${jstlCss})。您可以使用F12调试器来查找问题。寻找删除填充的样式。 我怀疑你的main.css中有一个名为“container”的类 或<link href="${jstlCss}" rel="stylesheet" /> 尝试将 .full-width { width: 100%; } 类添加到您的 div 中,就像这样 <div class="container full-width"> 。如果这不起作用,请尝试检查您的导航栏类,以便您可以在 CSS 文件中修改它们。 编辑: 这是bootstrap常用的导航栏: <nav class="navbar navbar-inverse"> <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" href="#">WebSiteName</a> </div> <ul class="nav navbar-nav"> <li class="active"><a href="#">Home</a></li> <li><a href="#">Page 1</a></li> <li><a href="#">Page 2</a></li> <li><a href="#">Page 3</a></li> </ul> </div> </nav> 将宽度增加至 100%。尝试下面的片段 .navbar { width: 100%; } <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <nav class="navbar navbar-inverse"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="#">Spring Boot</a> </div> <div id="navbar" class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li class="active"><a href="/flight_information_display">Home</a></li> <li><a href="/flight_information_display/about">About</a></li> </ul> </div> </div> </nav> 屏幕截图(拉伸至 2 个显示器) 已编辑 更改上述代码的格式 <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <html> <head> <title><tiles:getAsString name="title" /></title> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <link rel="stylesheet" type="text/css" href="webjars/bootstrap/3.3.7/css/bootstrap.min.css" /> <!-- <spring:url value="/css/main.css" var="springCss" /> <link href="${springCss}" rel="stylesheet" /> --> <c:url value="/css/main.css" var="jstlCss" /> <link href="${jstlCss}" rel="stylesheet" /> </head> <body> <div> <tiles:insertAttribute name="menu" /> </div> <div> <tiles:insertAttribute name="header" /> </div> <div> <tiles:insertAttribute name="body" /> </div> <div> <tiles:insertAttribute name="footer" /> </div> </body> 我可以通过更改图块布局来解决我的问题。 我用div代替table <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <html> <head> <title><tiles:getAsString name="title" /></title> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <link rel="stylesheet" type="text/css" href="webjars/bootstrap/3.3.7/css/bootstrap.min.css" /> <!-- <spring:url value="/css/main.css" var="springCss" /> <link href="${springCss}" rel="stylesheet" /> --> <c:url value="/css/main.css" var="jstlCss" /> <link href="${jstlCss}" rel="stylesheet" /> </head> <body> <div> <tiles:insertAttribute name="menu" /> </div> <div> <tiles:insertAttribute name="header" /> </div> <div> <tiles:insertAttribute name="body" /> </div> <div> <tiles:insertAttribute name="footer" /> </div> </body> 你的CSS代码在哪里: .navbar { /* ... (existing styles) ... */ /* Add the following properties */ width: 100%; /* Make the navbar take up the full width of the screen */ position: fixed; /* Fix the navbar at the top of the screen */ left: 0; right: 0; }
我有一张带有3D图块的图块地图,它根据图块规则面向。 每个图块上都有一个盒子碰撞器,它们被标记为静态对象以进行遮挡剔除。 我的计划...
字面上导致 StackOverflowError - Tiles 3
从 Struts 1.3/Tiles 1.x 组合迁移到 Struts 2/Tiles 3。 但这确实是一个 Tiles 问题 以前有支持定义内的bean声明来支持
与 Android 设备相比,IOS 设备上的 Mapbox 瓦片加载速度明显较慢。该应用程序是用 flutter 开发的。 我不太确定从哪里开始尝试
这道题基本上是要求以10秒的视频为例,计算出地砖的总数量。假设:地砖都是长方形的。如果视频是10秒,它有30fps, ...