我想在页面上显示简单的文本,因此我想返回Content-Typeas text/plain.
使用下面的代码,我在页面上看到纯文本,但返回Content-Type仍然是text/html.
我怎样才能解决这个问题?
注意:我正在使用带有Spring MVC的Tiles.返回的"m.health"指向一个tile def,它映射到一个health.jsp,它只包含下面的1行.
更新说明:我无法控制HTTP标头请求中的Content-Type或Accept值.text/plain无论发出什么样的请求,我都希望我的回复能够回复.
控制器:
@RequestMapping(value = "/m/health", method = RequestMethod.GET, headers = "Accept=*")
public String runHealthCheck(HttpServletResponse response, HttpServletRequest request, Model model) throws Exception {
model = executeCheck(request, response, TEMPLATE, false, model);
model.addAttribute("accept", "text/plain");
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
return "m.health";
}
Run Code Online (Sandbox Code Playgroud)
JSP:
$ {}状态
我正在寻找一个比Apache Tiles更好更容易使用的框架(到目前为止,我已经使用了几次).
使用Tiles,似乎当我有100个动作时,我需要创建100个jsp文件并在其中创建100个定义tiles.xml.
是否有更好的框架来管理我的模板?我想创建,例如,2个模板:
a)内容的菜单和列
b)菜单,内容列,右栏和横幅
在两个模板中,菜单都是常量.在template b,右列是常量,因此只有内容列不同.对于这个简单的例子,我不想定义扩展它的每个JSP文件template a(只是为了提供一个体).那是跛脚的imo.或许我很蹩脚,我可以在Apache Tiles中定义一个DEFAULT模板,我只是没有正确使用它.在任何情况下,所有帮助表示赞赏.
每当我尝试使用&nsbp时,我都会使用spring,js和其他技术实现.对于空白区域,它给我以下错误:
引起:org.apache.jasper.JasperException:/WEB-INF/views/entrada/list.jspx(94,67)引用了实体"nbsp",但没有声明.
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
at org.apache.jasper.compiler.JspDocumentParser.parse(JspDocumentParser.java:216)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:239)
at org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:120)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:165)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:332)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:589)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:650)
at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:644)
at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:103)
... 106 more
Run Code Online (Sandbox Code Playgroud)
我的代码:
</td>
<td>
<c:forEach items="${entrada.tags}" var="tag">
<spring:url value="/find/ByTags?tags=${tag.id}" var="buscarTag"/>
<a href="${buscarTag}">${tag}</a>
</c:forEach>
</td>
<td><input type="hidden" class="horasIn" value="${entrada.horas}"/>
${fn:substring(entrada.horas, 0, 10)}
<c:set var="totalHoras" value="${totalHoras+ entrada.horas }"></c:set>bs
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种使用Apache Tiles以类似于ASP.NET MVC 4的方式管理CSS和JS资源的好方法.
在ASP.NET MVC4中,您有ContentBundles和ScriptBundles,您可以简单地编写
@ Scripts.Render( "〜/捆绑/ jquery的");
它将使用所有正确的语法插入您的css/scripts.然后为了使它更好,有@RenderSection("JavaScript",必需:false),它允许您在正确的包含顺序中插入JavaScript,并在视图上定义它.
@section JavaScript
{
<script type="text/javascript" src="@Url.Content("/Scripts/jquery.tablesorter.min.js")"></script>
<script type="text/javascript" src="@Url.Content("/Scripts/Custom/Roster.js")"></script>
}
Run Code Online (Sandbox Code Playgroud)
为了简化这一点,我基本上想在Spring MVC中使用Apache Tiles做类似的事情.它甚至可能吗?
我最初的想法和尝试是在tiles配置文件中创建一个"bundle"作为定义,但是需要一些JSP代码来正确插入和创建html语法.有没有人曾经尝试过这个或找到一个好的解决方案?
我在http://www.coderanch.com/how-to/java/TilesJavaScript上找到了这个例子,但它对于Tiles 3来说似乎没有语法正确.
主layout.jsp
">
以下是您为多个js文件执行此操作的方法:
瓷砖-defs.xml
<!-- Child page Definition -->
<definition name="child.page" extends="master.page">
<put name="title" value="Child Page" />
<put name="jsfile" value="app.childpage.jsfiles.tile" />
</definition>
<!-- JS Files Definition tile -->
<definition name="app.childpage.jsfiles.tile" path="/layouts/jslayout.jsp">
<putList name="jsfilesList">
<add value="/config/childpage_jsfile1.js"/>
<add value="/config/childpage_jsfile2.js"/>
<add value="/config/childpage_jsfile3.js"/>
</putList>
</definition>
Run Code Online (Sandbox Code Playgroud)
jslayout.jsp
<tiles:useAttribute id="list" name="jsfilesList" classname="java.util.List" />
<c:forEach var="jsfileName" items="${list}">
<script …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Spring 3.1中配置apache tiles 2.2.2 EL支持.
根据tile文档以及我在google上发现的内容,这应该可以工作,但它确实没有,相反,它会抛出NullPointerException
瓷砖配置:
<bean class="org.springframework.web.servlet.view.tiles2.TilesViewResolver">
<property name="order" value="1"/>
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/views/**/views-def.xml</value>
</list>
</property>
<property name="tilesProperties">
<props>
<prop key="org.apache.tiles.evaluator.AttributeEvaluator">
org.apache.tiles.el.ELAttributeEvaluator
</prop>
</props>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
简单的瓷砖定义:
<tiles-definitions>
<definition name="temp.test" template="/WEB-INF/views/temp/test.jsp">
<put-attribute name="test" expression="${test}" />
</definition>
</tiles-definitions>
Run Code Online (Sandbox Code Playgroud)
test.jsp的
<%--Works fine--%>
<h2>Called in jsp</h2>
<p>
<c:out value="${test}"/>
</p>
<%-- throws NullPointerException --%>
<h2>Inserted from tiles</h2>
<p>
<tiles:getAsString name="test"/>
</p>
Run Code Online (Sandbox Code Playgroud)
cp上的Tiles库:
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>2.2.2</version>
</dependency> …Run Code Online (Sandbox Code Playgroud) 我是春天的新手,并试图在春天使用瓷砖.但是犯了错误.我在我的项目中使用maven.我也尝试过更改版本,但没有用.以下是项目内容:
的pom.xml
<!-- Apache Tiles -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-template</artifactId>
<version>3.0.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
servlet的context.xml中
<!-- for Tiles -->
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="viewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>
<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer" id="tilesConfigurer">
<property name="definitions" value="/WEB-INF/tiles-definitions.xml" />
</bean>
Run Code Online (Sandbox Code Playgroud)
瓷砖-definitions.xml中
<?xml version="1.0" encoding="UTF-8"?>
<tiles-definitions>
<definition name="base.definition" template="/WEB-INF/views/tilesMainTemplate.jsp">
<put-attribute name="title" value=""></put-attribute>
<put-attribute name="header" value="/WEB-INF/views/header.jsp"></put-attribute>
<put-attribute name="menu" value="/WEB-INF/views/home.jsp"></put-attribute>
<put-attribute name="body" value=""></put-attribute>
<put-attribute name="footer" value="/WEB-INF/views/footer.jsp"></put-attribute>
</definition>
<definition extends="base.definition" name="saveAd">
<put-attribute name="title" …Run Code Online (Sandbox Code Playgroud) 我想知道如何从视图中删除图块.我的主要观点是这样的

磁贴配置由4个部分组成:标题,菜单,正文和页脚.
现在我知道如果我请求一个新页面,我可以覆盖主视图,例如替换正文,以便我在那里显示不同的内容.
但是我希望能够点击菜单中的链接,将我带到一个只有标题和正文的页面(没有菜单或页脚).

然后,用户将完成一个向导,在该向导中,他们可以从一个页面转到另一个页面,然后一旦完成,它应该再次返回到主布局.
这是我的问题:如何从视图中删除菜单和页脚?我的问题在这里停止
由于没有太多关于磁贴的文档,我可以找到,我想我会为其他人努力获得使用Spring工具套件使用Apache Tiles和Spring MVC的工作示例(我的版本是STS 3.2.0).
创建一个新的STS项目
文件>>新>> Spring模板项目>> Spring MVC Project
选择"Spring MVC Project"选项
为您的项目提供名称和顶级包

这将创建一个如下所示的项目

从:
Run Code Online (Sandbox Code Playgroud)<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
至:
Run Code Online (Sandbox Code Playgroud)<org.springframework-version>3.2.0.RELEASE</org.springframework-version>
Run Code Online (Sandbox Code Playgroud)<!-- Tiles --> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-core</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-jsp</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-servlet</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-template</artifactId> <version>3.0.1</version> </dependency>
Run Code Online (Sandbox Code Playgroud)<!-- Remove --> <beans:bean class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"> <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"></beans:property> <beans:property name="order" value="0"></beans:property> </beans:bean> ? <!-- Add --> <beans:bean class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"> <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"></beans:property> …
我正在尝试将我的Java应用程序迁移到Spring Boot.目前,我正在使用Apache Tiles运行Spring MVC 3.2.当我迁移到Spring Boot时,我的控制器仍被调用,他们将视图传递给视图Resolver,但是当Tiles去拉JSP文件时,事情就会崩溃.我得到的错误信息是:
13:48:46,387 TRACE org.springframework.web.servlet.handler.SimpleUrlHandlerMapping:127 - No handler mapping found for [/jsp/layout/layout.jsp]
Run Code Online (Sandbox Code Playgroud)
有人在Spring Boot中成功使用过Apache Tiles吗?有什么想法怎么做?
提前感谢任何想法!
更多细节:
@Bean
public UrlBasedViewResolver viewResolver(){
LOGGER.trace("Entering tiles configurer");
UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
viewResolver.setViewClass(TilesView.class);
return viewResolver;
}
@Bean
public TilesConfigurer tilesConfigurer(){
LOGGER.trace("Entering tiles configurer");
System.out.println("Entering tiles configurer");
TilesConfigurer tilesConfigurer = new TilesConfigurer();
String[] defs = {"/WEB-INF/tiles-defs.xml"};
tilesConfigurer.setDefinitions(defs);
return tilesConfigurer;
}
Run Code Online (Sandbox Code Playgroud)
控制器:
@RequestMapping(value="/")
public ModelAndView index(ModelAndView mav, HttpServletRequest request, HttpServletResponse resp,RedirectAttributes ra){
LOGGER.trace("Arrived in Home Controller");
mav.addObject("profile",appContext.getEnvironment().getActiveProfiles()[0]);
mav.setViewName("home");
return mav;
} …Run Code Online (Sandbox Code Playgroud) 是否可以在ViewPreparer中访问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代码中解析字符串表达式(已翻译的字符串),但我意识到我可能必须明确指定"变量替换"的根对象才能工作,如此处所述.然后它似乎不是一个动态的解决方案.
有什么方法可以完成这项任务吗?任何帮助深表感谢!
apache-tiles ×10
spring-mvc ×5
java ×4
spring ×4
tiles ×2
apache ×1
content-type ×1
el ×1
html ×1
jsp ×1
maven ×1
spring-boot ×1
tiles2 ×1
whitespace ×1