这是我在web.xml文件中的配置
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
这是配置 pom.xml
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>2.2.2</version>
<type>pom</type>
<scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
它一直这样说:Can not find the tag library descriptor for "http://struts.apache.org/tags-tiles"当我将taglib添加到布局中时:
<%@ taglib prefix="tiles" uri="http://struts.apache.org/tags-tiles"%>
Run Code Online (Sandbox Code Playgroud)
当我在服务器上运行时:
SEVERE: Error configuring application listener of class org.apache.struts2.tiles.StrutsTilesListener
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
当天的问候,我只是试图找出使用Apache Tiles框架的利弊.请告诉我您宝贵的建议,意见和相同的意见.
我有一个使用Apache Tiles的Spring MVC项目.我已实现,以便可以从这样的消息源读取标题:
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" value="some-definition.title" cascade="true" />
</definition>
</tiles-definitions>
Run Code Online (Sandbox Code Playgroud)
在我的模板文件(定义public.base)中,我执行以下操作:
<title><spring:message text="" code="${title}" /></title>
Run Code Online (Sandbox Code Playgroud)
现在这适用于静态翻译标题,但我也想支持动态标题,例如显示公司名称.我可以这样做:
<tiles-definitions>
<definition name="some-definition" extends="public.base">
<put-attribute name="title" expression="${company.name}" />
</definition>
</tiles-definitions>
Run Code Online (Sandbox Code Playgroud)
然后只需在我的模板中输出标题,如下所示:<c:out value="${title}" />.但是,问题在于我的代码中断了,因为title属性的值不再是消息键.我希望能够支持以下场景:
理想情况下,我可以在我的消息源中使用表达式语言,但我无法使用它.我已经尝试了很多种解决方案,但我似乎找不到合适的解决方案.如果我可以在我的消息源中使用表达式语言,那么这很容易.例如,是否有可能以某种方式执行以下操作?
some-definition.title = Hello there, ${company.name}
Run Code Online (Sandbox Code Playgroud)
在我的模板中:
<spring:message text="" code="some-definition.title" var="test" />
<c:out value="${test}" />
Run Code Online (Sandbox Code Playgroud)
以上不起作用,因为它输出${company.name}而不是变量的实际内容.有没有办法让这样的工作?或者还有其他方法可以支持我上面列出的方案吗?
我考虑创建一个自定义JSTL标记,我将在普通Java代码中解析字符串表达式(已翻译的字符串),但我意识到我可能必须明确指定"变量替换"的根对象才能工作,如此处所述.然后它似乎不是一个动态的解决方案.
有什么方法可以完成这项任务吗?任何帮助深表感谢!
当我使用Tomcat 8时,我收到以下错误:
Caused by: java.io.IOException: ServletException including path '/WEB-INF/jsp/tiles-base.jsp'.
at org.apache.tiles.request.servlet.ServletUtil.wrapServletException(ServletUtil.java:61)
at org.apache.tiles.request.servlet.ServletRequest.doInclude(ServletRequest.java:245)
at org.apache.tiles.request.AbstractClientRequest.dispatch(AbstractClientRequest.java:54)
at org.apache.tiles.request.render.DispatchRenderer.render(DispatchRenderer.java:47)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:259)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:397)
... 37 more
Caused by: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.jsp.tiles_002dbase_jsp
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:131)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:62)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:129)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:171)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523)
at org.apache.tiles.request.servlet.ServletRequest.doInclude(ServletRequest.java:243)
... 41 more
Run Code Online (Sandbox Code Playgroud)
希望摆脱这个错误,我从Tiles 2.2.2升级到Tiles 3.0.5.但是仍然会遇到与Tomcat 8相同的错误.
使用Tomcat 7它可以工作.
我使用Spring版本3.2.9.RELEASE.
我认为它必须是Servlet API的一部分......?知道该怎么办?
这是tiles-base.jsp:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<% …Run Code Online (Sandbox Code Playgroud) 我使用Apache tile进行模板化,部分模板是标题文本.此文本取决于页面所属的部分.每个页面都包含一个bean,标题文本是使用该bean的属性构建的.bean的每个页面都有不同的名称.所以,在我的JSP文件中,我会有这样的事情:
<div>${myBean.id} - ${myBean.name}</div>
Run Code Online (Sandbox Code Playgroud)
我想在tile定义中得到那个表达式,我尝试了这个:
<definition template="/WEB-INF/tiles/layout/mytemplate.jsp">
<put-attribute name="title" expression="${myBean.id} - ${myBean.name}" />
</definition>
Run Code Online (Sandbox Code Playgroud)
在我做的模板中:
<div class="title-header"><tiles:insertAttribute name="title" /></div>
Run Code Online (Sandbox Code Playgroud)
但结果是未经处理的EL表达式:
<div>${myBean.id} - ${myBean.name}</div>
Run Code Online (Sandbox Code Playgroud)
这里的代码已经简化,以保持这篇文章的简洁,但这正是我想要做的.也有理由我尝试这样做.
知道EL表达式没有被处理的原因吗?
谢谢
注意:我对JSP和Apache Tiles相当新,所以我可能没有使用正确的术语.
我在struts2应用程序中使用tile.在定义基本布局时,我定义了一个属性"scriptFile".
<definition name="baseLayout" template="/application/base-layout.jsp" >
...
</definition>
<definition name="custom.tiles" extends="baseLayout">
<put-attribute name="scriptFile" value="js/custom-script.js"></put-attribute>
</definition>
Run Code Online (Sandbox Code Playgroud)
如果开发人员在切片定义文件"tiles.xml"中提供"scriptFile",则应使用以下行包含此脚本文件
<script language="javascript" src="<tiles:insertAttribute name="scriptFile"></tiles:insertAttribute>"></script>
Run Code Online (Sandbox Code Playgroud)
但是,如果未定义scriptFile属性,则必须跳过此行.
如何检查tile中是否存在"scriptFile"属性.有没有更好的方法来做这件事?
我正在使用Spring 3.2和Apache Tiles。我使用Roo生成了很多服务类。我正在尝试一个简单的过程,将变量注入jsp模板。那部分工作正常,但是我被困在需要引用服务bean的地步。
@Component
public class CustomViewPreparer implements ViewPreparer {
@Autowired
UserProfileService ups;
@Override
public void execute(TilesRequestContext tilesContext,
AttributeContext attributeContext) {
Authentication a = SecurityContextHolder.getContext().getAuthentication();
String name = a.getName(); //get logged in username
UserProfile up = ups.findByUsername(name);
//request.setAttribute("isLoggedIn", up!=null);
}
}
Run Code Online (Sandbox Code Playgroud)
UserProfileService的“ ups”始终为null。我发现了这一点:http : //forum.springsource.org/showthread.php?48950-ViewPreparer-is-triggered-before-Session-starts
但我不明白回应。我可以通过在每次返回View时注入变量来解决此问题,但是我很好奇其他人如何解决了这个问题。
我正在接受Apche tiles 3和Spring MVC 4的警告我没有为多语言支持添加任何额外的配置,但它默认支持.任何人都可以帮我禁用此选项以在我的网站中删除此警告.
org.apache.tiles.request.locale.PostfixedApplicationResource.
<init> No supported matching language for locale "sw".
Using file:/opt/apache-tomcat-8.0.35/webapps/ROOT/WEB-INF/tiles/app-core_sw.xml as a non-localized resource path. see TILES-571
Run Code Online (Sandbox Code Playgroud) 我试图在Struts 2中使用tile 2.2.2.我在项目中包含了所有必需的jar(与tile,Struts2和Struts2 tiles插件相关).
commons-beanutils-1.8.0.jar
commons-collections-3.1.jar
commons-digester-2.0.jar
commons-fileupload-1.3.jar
commons-io-2.0.1.jar
commons-lang-2.4.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
slf4j-api-1.5.8.jar
slf4j-jdk14-1.5.8.jar
struts2-core-2.3.15.jar
struts2-tiles-plugin-2.3.15.jar
tiles-api-2.2.2.jar
tiles-compat-2.2.2.jar
tiles-core-2.2.2.jar
tiles-jsp-2.2.2.jar
tiles-servlet-2.2.2.jar
tiles-template-2.2.2.jar
xwork-core-2.3.15.jar
Run Code Online (Sandbox Code Playgroud)
Tiles.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="baseLayout" template="/BaseLayout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/Header.jsp" />
<put-attribute name="menu" value="/Menu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/Footer.jsp" />
</definition>
<definition name="/welcome.tiles" extends="baseLayout">
<put-attribute name="title" value="Welcome" />
<put-attribute name="body" value="/Welcome.jsp" />
</definition>
<definition name="/employee.tiles" …Run Code Online (Sandbox Code Playgroud) 我正在使用Spring框架版本4,我混淆了哪个文件夹放置XML文件,特别是tile定义以及在哪里找到解析器bean.