相关疑难解决方法(0)

如何使用PrimeFaces p:fileUpload?从不调用Listener方法或者UploadedFile为null /抛出错误/不可用

我正在尝试使用PrimeFaces上传文件,但fileUploadListener上传完成后不会调用该方法.

这是观点:

<h:form>
    <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"
        mode="advanced" 
        update="messages"
        sizeLimit="100000" 
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>

    <p:growl id="messages" showDetail="true"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)

还有豆子:

@ManagedBean
@RequestScoped
public class FileUploadController {

    public void handleFileUpload(FileUploadEvent event) {
        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

}
Run Code Online (Sandbox Code Playgroud)

我已经在方法上放置了一个断点,但它从未调用过.当使用mode="simple"和时ajax="false",它已被调用,但我希望它在高级模式下工作.我正在使用Netbeans和Glassfish 3.1.

jsf file-upload primefaces jsf-2

98
推荐指数
3
解决办法
14万
查看次数

Servlet过滤器的执行顺序

我偶然发现我的网络应用程序中的一个错误,让我摸不着头脑(并最终拉我的头发)一段时间才发现发生了什么事.

基本上,我在我的web.xml中定义了2个过滤器,这两个映射是这样的:

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>

<filter-mapping>
    <filter-name>SpringFormMethodFilter</filter-name>
    <url-pattern>/administration/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

它们都是Spring MVC过滤器.我的问题是我得到的表单数据并没有被解释为UTF-8,尽管在其他任何有机会从它读取之前,encodingFilter应该将请求编码设置为UTF-8.

我终于注意到,在编码过滤器之前执行了表单方法过滤器,尽管定义过滤器映射的顺序应该是它们被链接的顺序:

链中的过滤器顺序与过滤器映射在Web应用程序部署描述符中出现的顺序相同.

(来自Oracle)

当我使用相同的映射,即映射到servlet而不是URL模式时,对于两个映射,订单都会恢复,并且一切都按预期工作:

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>

<filter-mapping>
    <filter-name>SpringFormMethodFilter</filter-name>
    <servlet-name>SpringMVCDispatcher</servlet-name>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

这是Servlet规范的一部分还是Tomcat的故障?是否在某处提供了文件,我应该提交错误报告吗?

我在Java 7中使用Tomcat 7.0.39.

tomcat servlets servlet-filters tomcat7

31
推荐指数
1
解决办法
3万
查看次数

web.xml过滤器如何工作?你有两个过滤器映射到所有页面(/*)并指定顺序吗?

我想使用Spring Security,它说要将过滤器映射到/***.但我已经有一个映射到/*的过滤器,它是Tuckee URLRewrite过滤器.

是否可以将两个过滤器映射到同一个东西,还有一种方法可以指定过滤器被调用的顺序吗?

java web.xml servlets spring-security

24
推荐指数
1
解决办法
3万
查看次数

调用过滤器的顺序是什么?

假设我在我的web.xml中有以下内容

<filter-mapping>
    <filter-name>F1</filter-name>
    <url-pattern>/XYZ/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>F2</filter-name>
    <url-pattern>/XYZ/abc.do</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>F3</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

如果请求以/XYZ/abc.do.And为什么,将调用过滤器的顺序是什么?

java servlets java-ee servlet-filters

14
推荐指数
2
解决办法
2万
查看次数

使用Tomcat,@ WebFilter不能与web.xml中的<filter-mapping>一起使用

这是一个有效的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

     <filter>
        <filter-name>rememberMeCookieFilter</filter-name>
        <filter-class>be.example.fun.jsp.filters.RememberMeCookieFilter</filter-class>
    </filter>

    <filter>
        <filter-name>mustBeSignedInFilter</filter-name>
        <filter-class>be.example.fun.jsp.filters.MustBeSignedInFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>rememberMeCookieFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>mustBeSignedInFilter</filter-name>
        <url-pattern>/private/*</url-pattern>
    </filter-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

当我删除<filter>元素并使用以下注释时:

@WebFilter(filterName="rememberMeCookieFilter")
public class RememberMeCookieFilter implements Filter

@WebFilter(filterName="mustBeSignedInFilter")
public class MustBeSignedInFilter implements Filter
Run Code Online (Sandbox Code Playgroud)

然后Tomcat 7.0.14给我以下错误:

java.lang.IllegalArgumentException: Filter mapping must specify either a <url-pattern> or a <servlet-name>
    at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:2956)
    at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:2915)
    at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1180)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270)
        ...
Run Code Online (Sandbox Code Playgroud)

我按照这个问题的答案,但这对我不起作用.

以下是我的Web应用程序的依赖项:

<dependencies>
        <!-- SLF4J (+ LOGBack) for logging -->
        <dependency> …
Run Code Online (Sandbox Code Playgroud)

java tomcat java-ee servlet-filters

8
推荐指数
1
解决办法
9180
查看次数

使用Java EE 6注释进行Servlet过滤?

是否可以使用EE 6中的@ApplicationPath和@Path注释来模拟servlet过滤器链?

例:

@ApplicationPath("/api")
class Filter extends Application { 
    @Path("/*")
    public void filter() {
        log.info("Request to API");
    }
}
Run Code Online (Sandbox Code Playgroud)

...

@Path("/foo")
class Foo {
    @GET
    @Path("/bar")
    @Produces("text/plain")
    public String bar() {
        return "Hello World";
    }
}
Run Code Online (Sandbox Code Playgroud)

URL的位置是http://foobar.com/api/foo/bar,但"filter"方法将被调用,就像它是一个servlet过滤器链一样.我知道上面的方法不会起作用,但是在这种方法中是否有一个带注释的方法,就像从web.xml文件配置"过滤器"一样?

java annotations servlets java-ee servlet-filters

7
推荐指数
1
解决办法
1万
查看次数

如何使用Spring的Java配置指定过滤器执行顺序?

我在初始化程序中有以下代码:

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Filter[] getServletFilters() {

        DelegatingFilterProxy shiroFilter = new DelegatingFilterProxy("shiroFilter");
        shiroFilter.setTargetFilterLifecycle(true);

        return new Filter[]{new CorsFilter(),shiroFilter};
    }
}
Run Code Online (Sandbox Code Playgroud)

我想CorsFilter先被执行ShiroFilter.但是,Spring文档并未说明执行过滤器的顺序取决于它们在返回数组中的顺序.

如果是,有人可以澄清一下吗?如果没有,有人建议如何,我保证过滤器的执行顺序?

java spring spring-java-config

7
推荐指数
2
解决办法
8689
查看次数

<absolute-ordering>在tomcat 7中不起作用

我看到这个答案暗示要添加<absolute-ordering>.

我正在使用tomcat 7.0.29并且有一些过滤器都是这样定义的:(不在web.xml中)

@WebFilter(filterName = "SessionFilter",  servletNames = { "Jersey Web Application" })
public class HibernateSessionRequestFilter implements Filter {
Run Code Online (Sandbox Code Playgroud)

由于我希望在调用过滤器之前调用会话过滤器authenticationfilter,因此我在<web-app>标记之间向web.xml添加了以下内容.

<absolute-ordering>
      <name>SessionFilter</name>
      <name>AuthenticationFilter</name>
</absolute-ordering>
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,并且在会话过滤器之前执行身份验证过滤器.

为什么?

java tomcat servlet-filters tomcat7

3
推荐指数
1
解决办法
7494
查看次数

除了在 web.xml 中声明之外,有没有办法指定过滤器的顺序?

从 Servlet 3.0 开始,我们现在可以通过注释(@WebFilter)或动态(通过ServletContext对象)声明 Web 过滤器。

我知道使用 @WebFilter 不允许指定过滤器顺序。同样,当通过ServletContext.addFilter()方法动态声明它时,我还没有找到任何指定顺序的方法。我已经查看了 FilterRegistration 对象,但那里也没有任何内容。

这是否意味着在过滤器链中指定过滤器顺序的唯一方法是通过 web.xml?没有其他可用的机制吗?这不是对 Servlet 3.0+ 的重大疏忽吗?

通过注释或 ServletContext 对象声明的过滤器在链中的哪个位置?那些在web.xml中声明的结尾?不明确的?

java web.xml servlet-3.0 servlet-filters

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