- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的网络应用程序中使用 Thymeleaf 作为模板引擎。我在Google上搜索了如何使用struts2配置Themeleaf,并找到了一些解决方案 plugin 。我已在我的应用程序中配置了插件,但无法使用插件呈现页面。相反,我收到错误:
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/WEB-INF/templates/hello.html", template might not exist or might not be accessible by any of the configured Template Resolvers
org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:246)
org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104)
org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
org.thymeleaf.TemplateEngine.process(TemplateEngine.java:955)
com.struts.custom.resulttype.plugin.ThemeleafResult.execute(ThemeleafResult.java:51)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:374)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
这是DefaultTemplateEngineProvider.java
的实现
public class DefaultTemplateEngineProvider implements TemplateEngineProvider {
// HTML5 is the future!
private String templateMode = "HTML5";
private String characterEncoding = "UTF-8";
// This will convert "home" to "/WEB-INF/templates/home.html"
private String prefix = "/WEB-INF/templates/";
private String suffix = ".html";
private boolean cacheable = true;
// Default template cache TTL to 1 hour. If not set, entries would live in
// cache until expelled by LRU.
private Long cacheTtlMillis = 3600000L;
private TemplateEngine templateEngine;
/**
* Configure settings from the struts.xml or struts.properties, using sensible
* defaults if values are not provided.
*/
public void configure() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setTemplateMode(templateMode);
templateResolver.setCharacterEncoding(characterEncoding);
templateResolver.setPrefix(prefix);
templateResolver.setSuffix(suffix);
templateResolver.setCacheable(cacheable);
templateResolver.setCacheTTLMs(cacheTtlMillis);
templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
templateEngine.setMessageResolver(new StrutsMessageResolver());
}
public TemplateEngine get() {
if (templateEngine == null) {
configure();
}
return templateEngine;
}
@Inject(value = "struts.thymeleaf.templateMode", required = false)
public void setTemplateMode(String templateMode) {
this.templateMode = templateMode;
}
@Inject(value = "struts.thymeleaf.encoding", required = false)
public void setCharacterEncoding(String characterEncoding) {
this.characterEncoding = characterEncoding;
}
@Inject(value = "struts.thymeleaf.prefix", required = false)
public void setPrefix(String prefix) {
this.prefix = prefix;
}
@Inject(value = "struts.thymeleaf.suffix", required = false)
public void setSuffix(String suffix) {
this.suffix = suffix;
}
@Inject(value = "struts.thymeleaf.cacheable", required = false)
public void setCacheable(String cacheable) {
this.cacheable = Boolean.parseBoolean(cacheable);
}
@Inject(value = "struts.thymeleaf.cacheTtlMillis", required = false)
public void setCacheTtlMillis(String cacheTtlMillis) {
this.cacheTtlMillis = Long.parseLong(cacheTtlMillis);
}
}
我已经编写了自定义结果集并配置了 Thymeleaf,如官方网站上所述。但得到同样的错误。
我的自定义结果类型是
public class ThymeleafResult implements Result {
private String defaultEncoding = "UTF-8";
private TemplateEngineProvider templateEngineProvider;
private String templateName;
/**
* The result parameter name to set the name of the template to.
* <p/>
* IMPORTANT! Struts2 will look for this field reflectively to determine which
* parameter is the default. This allows us to have a simplified result
* configuration. Don't remove it!
*/
public static final String DEFAULT_PARAM = "templateName";
public ThymeleafResult() {
}
public ThymeleafResult(String templateName) {
this.templateName = templateName;
}
public void execute(ActionInvocation actionInvocation) throws Exception {
TemplateEngine templateEngine = templateEngineProvider.get();
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext servletContext = ServletActionContext.getServletContext();
Object action = actionInvocation.getAction();
StrutsContext context = new StrutsContext(request, response, servletContext, action);
response.setContentType("text/html");
response.setCharacterEncoding(defaultEncoding);
System.out.println(templateName);
templateEngine.process(templateName, context, response.getWriter());
}
@Inject(StrutsConstants.STRUTS_I18N_ENCODING)
public void setDefaultEncoding(String defaultEncoding) {
this.defaultEncoding = defaultEncoding;
}
@Inject
public void setTemplateEngineProvider(TemplateEngineProvider templateEngineProvider) {
this.templateEngineProvider = templateEngineProvider;
}
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
struts.xml是
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="1000000000" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<bean type="org.codework.struts.plugins.thymeleaf.spi.TemplateEngineProvider" name="default" class="org.codework.struts.plugins.thymeleaf.spi.DefaultTemplateEngineProvider" />
<package name="default" namespace="/" extends="struts-default">
<result-types>
<result-type name="thymeleaf" class="org.codework.struts.plugins.thymeleaf.ThymeleafResult"/>
</result-types>
<default-action-ref name="home"></default-action-ref>
<action name="home" class="com.demo.example.Welcome">
<result name="success" type="thymeleaf">/WEB-INF/templates/hello.html</result>
</action>
</package>
</struts>
最佳答案
我找到了解决方案:我在 struts.xml 中进行了错误的映射。
我刚刚更换
<result name="success" type="thymeleaf">/WEB-INF/templates/hello.html</result>
与
<result name="success" type="thymeleaf">hello</result>
并且成功了。
关于java - Struts 2 与 Thymeleaf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30982665/
我正在尝试从 struts-config 调用使用 struts 1 中的操作转发属性,并且我想调用另一个操作,它位于另一个 struts.config 文件中。显然它不起作用! 我的代码是: In
我是 Struts 框架的菜鸟。我试图了解 Action 映射是如何工作的。假设我有一个发送 AJAX 请求的 JavaScript 文件: $("button").click(function(){
嗨,我愿意更新从数据库中获取并加载到 JSP 上的复选框的值。我正在创建员工资料。 Jsp 具有员工姓名、员工地址、员工技术技能等字段。 员工技能具有以下复选框以选择以下值 复选框 1:Java 复选
在上面的代码中,fo
如何找到正在使用的 Struts 版本 在 Web应用项目在 Eclipse 中? 我的 struts-config.xml 说 谢谢。 最佳答案 打开 struts jar 并在 META-INF
我一段时间以来一直试图找到这个问题的明确答案,但没有任何运气。我需要知道为什么Struts是紧耦合的? struts 的哪个组件使其紧密耦合。 最佳答案 这太棒了Mkyong article正如我们所
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我只是尝试在带有 struts 提供的标签的 jsp 页面中包含一个文本框。但它表现得很典型。 在职的 不工作 所以,没有属性(property)'value' ,它不工作。 请帮帮我。 笔记: 使
我使用 eclipse 来实现原生 Struts 和 hybernate 支持应用程序在页面中显示一系列链接。我收到错误: javax.servlet.jsp.JspException: Cannot
我的 JSP 中有以下代码: .. .. .. .. 这在 struts-config.xml 中文件: 喜欢delete行动吧,我有edit和up
谁能解释一下 Struts 和 Tapestry 框架之间的区别或者它们之间的比较? 问候,马亨德拉·阿特尼亚孟买印度 最佳答案 此处更新了 Tapestry 教程:http://tapestry.a
我有一个在 weblogic 上运行的 j2ee 应用程序。我对我的多功能盒感到困惑。 我对 multibox 的了解是,选中的项目将在提交时作为字符串数组传递。 我不知道为什么在我的应用程序中,当我
我正在设计一个购物车项目,其中只有我的内容区域会发生变化,因此我使用 struts 磁贴对其进行了配置,并且一切正常,直到我在我的项目中遇到表单。每当我尝试使用图 block 显示表单(struts
我想删除在 Struts 1.3 显示标签中没有找到显示的消息,当没有从数据库中获取记录时。 有可能这样做吗...? 最佳答案 从我的角度来看,默认行为应该是在空数据源的情况下不显示任何消息。 emp
我在浏览器窗口中收到以下错误: org.apache.jasper.JasperException:javax.servlet.ServletException:javax.servlet.jsp.J
我是 Struts 的新手。我在 struts 中有一个现有的 java 项目。该项目有 struts.xml 和 .struts.mex 文件。我了解到 struts.xml 是 Action 类到
我遇到了问题。我一直在不同的论坛上寻找答案,但不幸的是我没有找到答案。我需要这个,因为我正在创建一个网页,您可以在其中更改语言,因此不能对其进行硬编码。我需要这样做: "> 所以我想将 html 标记
我正在使用 Struts 2.1.8.1。我想在我的 jsp 页面中使用 struts 提供的标签。例如 Transfer Program - Log
我创建了一个名为 RegesterAction 的新类,但我没有将此类保留在任何包中。如何在 struts.xml 中配置此类? 下面是 struts.xml 文件,但我无法理解属性值 "defaul
我正在开发一个支持 AJAX 的 JavaScript 前端,它可以调用用 Struts 编写的 Java 后端。我的问题是,当后端抛出异常时,客户端仍然会看到“200 OK”HTTP 响应代码,而不
我是一名优秀的程序员,十分优秀!