标签: sitemesh

sitemesh装饰器中的Spring安全标签

我想在site-mesh的装饰器文件中使用spring安全标记库的一些标记.但是这些标签内的内容从未显示过.谁能告诉我为什么会这样?

码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<!--HTML-->
     <form id="login_form" method="post" action="<c:url value='j_spring_security_check'/>">
      <sec:authorize access="isAuthenticated()">
       <p>profile</p>
       <p>messages</p>
      </sec:authorize>
      <sec:authorize access="isAnonymous()">

       <!--A Login form -->
      </sec:authorize>
     </form>
<!--More HTML -->
</html>
Run Code Online (Sandbox Code Playgroud)

由于某种原因,两个块都没有显示.

java jsp struts sitemesh spring-security

6
推荐指数
1
解决办法
4684
查看次数

Apache Tiles退休了。备择方案?

Apache Tiles于2018年12月移入阁楼。因此Apache Tiles已退休。

我正在使用Spring MVC框架和JSP。

有哪些替代方案?我看到了Sitemesh,但这是一个装饰器,我需要一个模板框架。

我想维护自己的图块并使用其他框架。这是一个很大的应用程序,所以我无法同时重写所有图块

有人可以帮我吗?

spring jsp tiles sitemesh deprecated

6
推荐指数
1
解决办法
1107
查看次数

从Grails中的布局视图访问模型

我在Grails中使用布局支持(sitemesh)工作正常.我想调整我的布局,使其取决于用户是否登录.

我的grails-app/views/layouts/main.gsp包含以下代码:

<g:if test="${user}">
  Username: ${user.username}
</g:if>
Run Code Online (Sandbox Code Playgroud)

但是,看起来好像layout-GSP:s无法访问模型,因此无法访问用户变量(尝试时我得到"No session"异常).制作布局的推荐方法取决于用户是否登录?

提前致谢!

model-view-controller grails sitemesh

5
推荐指数
1
解决办法
2999
查看次数

将SiteMesh与RequestDispatcher的forward()一起使用

我正在尝试使用Tomcat 5作为我的容器将SiteMesh集成到遗留应用程序中.我有一个main.jsp我正在用一个简单的装饰器装饰.

decorators.xml,我刚刚定义了一个装饰器:

<decorators defaultdir="/decorators">
  <decorator name="layout-main" page="layout-main.jsp">
    <pattern>/jsp/main.jsp</pattern>
  </decorator>
</decorators>
Run Code Online (Sandbox Code Playgroud)

如果我手动去,这个装饰工作http://example.com/my-webapp/jsp/main.jsp.但是,有一些地方的servlet,而不是重定向到jsp,执行转发:

getServletContext().getRequestDispatcher("/jsp/main.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)

这意味着URL保留在类似于http://example.com/my-webapp/servlet/MyServletjsp文件的东西上,因此没有被装饰,我认为因为它与模式不匹配decorators.xml.

我不能做,<pattern>/*</pattern>因为还有其他jsps不需要装饰layout-main.jsp.我不能做一个<pattern>/servlet/MyServlet*</pattern>因为有时MyServlet可能转发main.jsp,也许error.jsp在其他时间转发.

有没有办法解决这个问题,而无需对servlet如何工作进行广泛的更改?由于它是一个遗留的应用程序,我没有那么多的自由来改变事物,所以我希望有一些配置方面可以解决这个问题.

SiteMesh的文档真的不是很好.我一直在为分发附带的示例应用程序工作.我真的很喜欢SiteMesh,我希望能在这种情况下让它工作.

java jsp sitemesh forward

5
推荐指数
1
解决办法
4812
查看次数

使用JSP,taglib URI是否意味着我的网站依赖于URI解析?

我正在尝试在我的网站中实现sitemesh装饰器.他们网站上的示例有一个完整的URI链接到他们的站点,用于装饰器文件的taglib部分:

<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
Run Code Online (Sandbox Code Playgroud)

这是否意味着我的网站依赖于能够访问该网站?因为我想部署在无法访问外部世界的Intranet内部.

谢谢

java jsp sitemesh

5
推荐指数
1
解决办法
5234
查看次数

在没有html和body标签的grails中渲染页面

我想呈现Grails的页面没有<html>,<head><body>标签,我只是想DIV和表格.

我想这个网页在我的Facebook页面整合和Facebook页面的要求是网页不应该包含<html>,<head><body>标签.

grails layout sitemesh facebook-page

5
推荐指数
1
解决办法
3077
查看次数

如何捕获Spring消息JstTagException?

我正在使用带有sitemesh和spring消息包的Spring MVC 3.0.例如,我有以下内容:

<spring:message code="nav.item.name"/>
Run Code Online (Sandbox Code Playgroud)

如果我的资源文件中不存在nav.item.name,我在控制台中收到一个空白页面和一个JspTagException,我无法用我的@ExceptionHandler方法捕获它.我假设我无法捕捉它,因为错误是视图渲染的一部分.我还试图创建一个自定义HandlerInterceptorAdapter,并修改web.xml,但没有成功.有趣的是,我还使用了以下标记:

<fmt:message key="nav.item.name"/>
Run Code Online (Sandbox Code Playgroud)

视图显示页面,但带有"???????" 对于文本.这实际上对我至少可以显示页面更容易接受,但我宁愿使用spring:message标签.

我的问题是:我如何捕获JspTagException?

堆栈跟踪:

2011-10-12 09:31:16,155 ERROR [http-8080-2] RequestContextAwareTag - 在代码'BLAH'下找不到区域设置'ko_KR'的消息.javax.servlet.jsp.JspTagException:在代码'BLAH'下找不到区域设置'ko_KR'的消息.在Org.apache.jache.jEB_002dINF的org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:184)org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79) .pages.common.nav_jsp._jspx_meth_spring_005fmessage_005f0(nav_jsp.java:206)org.apache.jsp.WEB_002dINF.pages.common.nav_jsp._jspService(nav_jsp.java:114)org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:70)位于org.apache.jasper的org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)的javax.servlet.http.HttpServlet.service(HttpServlet.java:717).位于org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)的servlet.JspServlet.serviceJspFile(JspServlet.java:313)位于org的javax.servlet.http.HttpServlet.service(HttpServlet.java:717) .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:20 6)org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)atg.apache.catalina.core.ApplicationDispatcher .include(ApplicationDispatcher.java:488)位于org.springframework.web.servlet.view.AbstractView.render上的org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:229)(AbstractView.java:250 )org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)位于org.springframework.web.servlet.DispatcherServlet的org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817).位于org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)的doService(DispatcherServlet.java:719)位于org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)的javax.servlet上javax.ser上的.http.HttpServlet.service(HttpServlet.java:617)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)的vlet.http.HttpServlet.service(HttpServlet.java:717)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)atg.apache.catalina.core.ApplicationDispatcher .include(ApplicationDispatcher.java:488)org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)at org.apache.jsp.WEB_002dINF.sitemesh_002ddecorators.main_jsp._jspx_meth_form_005fform_005f0(main_jsp.java:284)at org.apache.jsp.WEB_002dINF.sitemesh_002ddecorators.main_jsp._jspService(main_jsp.java:138)位于org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)的javax.servlet.http.HttpServlet.service( HttpServlet.java:717)org.apache.jasper.servlet.JspServletWrapper.service(JspS)ervletWrapper.java:386)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)位于org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)的javax.servlet.http .httpServlet.service(HttpServlet.java:717)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)org.apache.catalina.core.ApplicationDispatcher.include( ApplicationDispatcher.java:488)com.opensymphony.sitemesh.compatability.OldDecorator2NewDecorator.render(OldDecorator2NewDecorator.java:46)com.opensymphony.sitemesh.webapp.decorator.BaseWebAppDecorator.render(BaseWebAppDecorator.java:33)com.opensymphony .sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:84)at或 g.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)位于org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206). dogilterInternal(OpenEntityManagerInViewFilter.java:113)位于org.apache的org.apache.catal.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) .catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) :191)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)org.apache.catalina.core. StandardEngineValve.invoke(Standa rdEngineValve.java:109)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)org.apache.coyote .http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)atg.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run(Unknown Source)

谢谢!戴夫

spring localization exception-handling spring-mvc sitemesh

5
推荐指数
1
解决办法
2129
查看次数

如何对扩展/继承第 3 方类的类进行单元测试

我创建了一个扩展第 3 方抽象类的新类。新类调用抽象类中的方法。我遇到的问题是在尝试编写单元测试时,我不确定如何编写测试,因为我不知道 3rd 方课程所需的确切细节。

下面的 AbstractDecoratorMapper 是一个 SiteMesh 特定的类,我必须扩展它才能使 SiteMesh 正常工作。据我从文档中可以看出,我不能使用组合。

public final class PartnerDecoratorMapper extends AbstractDecoratorMapper {

    @Override
    public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException {
        super.init(config, properties, parent);
    }

    @Override
    public Decorator getDecorator(HttpServletRequest request, Page page) {
        if (super.getDecorator(request, page).getName().equalsIgnoreCase("default")) {
            return getNamedDecorator(request, "externalPartnerDefault");
        }
        return super.getDecorator(request, page);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果此工具可以提供任何帮助,我会使用 JMock。

java unit-testing sitemesh jmock

5
推荐指数
1
解决办法
2449
查看次数

org.springframework.web.filter.HiddenHttpMethodFilter 无法转换为 javax.servlet.Filter

我有一个基于 spring 框架 3 的 Maven Web 应用程序,当我maven-jetty-plugin通过运行命令在 jetty 上运行该应用程序时mvn -e clean jetty:run,它运行正常,但是当我tomcat-maven-plugin通过运行命令在 tomcat 上运行它时mvn -e clean tomcat:run,它给出了以下异常:

java.lang.ClassCastException: org.springframework.web.filter.HiddenHttpMethodFilter cannot be cast to javax.servlet.Filter
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
        at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
        at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)
        at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
        at …
Run Code Online (Sandbox Code Playgroud)

spring sitemesh spring-security maven servlet-filters

5
推荐指数
1
解决办法
4756
查看次数

Struts 2 + Sitemesh 3集成 - FreemarkerDecoratorServlet中的NPE

我使用Struts 2(版本2.3.14.3)和Sitemesh 3(版本3.0-alpha-2),我在cerain情况下得到一个NullPointerException.

首先,这是我在web.xml中的struts2/sitemesh配置:

<filter-mapping>
    <filter-name>struts-prepare</filter-name>
    <url-pattern>*.do</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>*.do</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

<filter-mapping>
    <filter-name>struts-execute</filter-name>
    <url-pattern>*.do</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

<servlet>
    <servlet-name>sitemesh-freemarker</servlet-name>
    <servlet-class>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet</servlet-class>
    <init-param>
        <param-name>default_encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)

现在,这是问题描述:

如果启用了struts dev.mode并且我尝试访问不存在的操作,则抛出struts ConfigurationException.

Struts调度程序尝试通过调用org.apache.struts2.dispatcher.Dispatcher.sendError()来处理异常,该函数将标准Struts错误模板(/org/apache/struts2/dispatcher/error.ftl)写入响应.

现在这是事情开始出错的时候了.

因为原始请求是用sitemesh过滤器修饰的,即使发生配置错误之后,sitemesh也会尝试应用装饰器,这会导致异常,因为由于配置异常导致Struts操作上下文设置不正确而且我得到以下内容:

java.lang.NullPointerException
org.apache.struts2.sitemesh.FreemarkerDecoratorServlet.process(FreemarkerDecoratorServlet.java:176)
Run Code Online (Sandbox Code Playgroud)

以下是来自FreemarkerDecoratorServlet.java的相应代码 - ctx变量为null:

ActionContext ctx = ServletActionContext.getActionContext(request);
model = freemarkerManager.buildTemplateModel(ctx.getValueStack(), ctx.getActionInvocation().getAction(), servletContext, request, response, wrapper);
Run Code Online (Sandbox Code Playgroud)

我认为sitemesh不应该尝试装饰响应,以防在调用操作时出现错误,但我不知道如何在不修改Struts2/Sitemesh集成的情况下执行此操作.

任何想法如何避免NPE?

谢谢,马雷克

java integration freemarker struts2 sitemesh

5
推荐指数
1
解决办法
948
查看次数