网页过滤器破坏了 PrimeFaces 移动视图

2024-06-22

在我使用 PrimeFaces 3.4.2 的 JSF2.1 Web 应用程序中,我添加了一个新网页,其中仅包含一个视图renderKitId="PRIMEFACES_MOBILE"(PFM 0.9.3)。这个想法是过滤器将来自移动设备的请求重定向到此页面。不幸的是,这个过滤器完全破坏了某些移动设备上移动页面的 CSS(是的,并非所有设备都会受到影响!)。当过滤器存在时,受影响的设备上的重定向呼叫和直接呼叫都会被破坏;当过滤器关闭时,一切正常。

这里是网络过滤器:

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;

    boolean isMobile = isMobileDevice(req.getHeader("user-agent"));  // utility function

    if (!req.getRequestURI().contains("/mobile/") && isMobile) {
        resp.sendRedirect(req.getContextPath() + "/faces/mobile/index.xhtml");
    } else {
        chain.doFilter(request, response);
    }    
}

该过滤器在 web.xml 中没有任何映射。仅注释@WebFilter("/*")存在。当注释内的路径是伪造的时,一切正常。

xhtml 页面......相当简单:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:pm="http://primefaces.org/mobile" >
    <h:head>
    </h:head>
    <h:body>
        <f:view renderKitId="PRIMEFACES_MOBILE">
            <pm:page title="Hello World">
                <pm:view id="main">
                    <pm:header title="Header" />
                </pm:view>
            </pm:page>        
        </f:view>    
    </h:body>
</html>

有关受影响设备的其他信息。 我没有关于如何调试这个的提示。我已经使用 Firebug 查看了生成的 html,但无法检测到工作的 html 和另一个之间的任何差异。


您需要让过滤器跳过 CSS/JS/图像文件上的 JSF 资源请求。

if (req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {
    chain.doFilter(request, response);
    return;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网页过滤器破坏了 PrimeFaces 移动视图 的相关文章

随机推荐

  • 高速公路无法导入名称错误

    我已经使用安装了twisted和Autobahn websocket pip install twisted pip install autobahn 但是当我从高速公路导入任何工厂时 我收到无法导入名称错误 gt gt gt from t
  • 查找top-k元素的平均时间复杂度

    考虑在一组 N 个独立且同分布的浮点值中查找前 k 个元素的任务 通过使用优先级队列 堆 我们可以对所有 N 个元素进行一次迭代 并通过以下操作维护一个 top k 集合 如果元素 x 比堆头 更差 丢弃 x 复杂度 O 1 如果元素 x
  • make - 在同一个 eval 调用中定义多个变量

    我想用make s eval函数在一个内部定义多个 动态命名的 变量foreach 但我无法得到eval来做这项工作 我尝试过这样的事情 eval var1 val1 var2 val2 它不起作用 var1被定义为val1 var2 va
  • Rails 博客引擎 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 寻找一个支持文章管理的简单博客引擎 我有独立的 Rails3 2x 应用程序和身份验证系统 我必须为网
  • 如何检索带有元数据标记的函数

    看下面的代码片段 import dart mirrors class meta final String data const meta this data meta Tag doSomething gt print You have to
  • 如何过滤视觉选择?

    假设我们有一些不错的文本 Hello world 我们选择world在视觉模式下 然后我们可以使用像这样的闪亮命令来过滤视觉选择 lt gt echo foobar 但是 这会将整行替换为foobar而不仅仅是world 这是为什么 我们该
  • Android NDK Clang 编译器 (r16b) 的 FFMPEG 源编译失败,并出现错误“clang 编译器不支持 '-mcpu=arm'”

    使用 Android NDK Clang 编译器 r16b 编译 FFMPEG 源时 出现编译器错误 对于以下配置 configure prefix home prasaathviki Desktop ffmpeg bin android
  • WireMock:存根 - 如何获取对象“testClient”?

    我想测试http请求 响应 所以我使用WireMock 我想对特定请求进行存根响应 这里的代码 public class WireMockPersons Rule public WireMockRule wireMockRule new W
  • 如何使用 keras/tensorflow 构建无监督 CNN 模型?

    我正在尝试为图像到图像转换应用程序构建 CNN 模型的输入是图像 输出是置信图 训练期间没有标记的置信度作为基本事实 但设计了损失函数来引导模型获得正确的输出 我在用 keras 构建神经网络时遇到困难 因为 model fit 函数需要训
  • 如何在Struts2中使用迭代器从linkedhashmap中检索值......?

    我有在 Struts2 中返回 LinkedHashMap 的函数 我刚刚知道我们不能在 struts2 中使用 for 循环 而是必须使用迭代器 并且是 struts 的新手 任何人都可以帮助我使用迭代器从 linkedhashmap 检
  • 无法使用 android Paging 库加载下一个数据

    我正在尝试使用 Room Paging LiveData ViewModel 显示通话记录列表 无需分页 我的代码就可以完美运行 我也想使用分页 在我的数据库中 我总共有 25 条通话记录 列表中显示前 9 条通话记录 通过调试我发现在通过
  • 如何将异步方法作为 Action 或 Func 传递

    我有一个小实用方法 用于在 using 语句中实例化我的 DataContext 我想将其与异步方法调用一起使用 但是 DataContext 在方法返回之前被释放 使用这个的正确方法是什么 这是方法 和重载 public void Try
  • 跨子域的 PHP 会话

    我正在尝试设置以下内容 auth example com sub1 example com sub2 example com 如果用户访问sub1 example com or sub2 example com他们没有登录 他们被重定向到a
  • 为什么使用寄存器 R12 时 POP 速度很慢?

    在最新的 Intel CPU 上 POP指令通常每周期具有 2 条指令的吞吐量 但是 当使用寄存器时R12 or RSP 除了前缀之外具有相同的编码 如果指令通过传统解码器 吞吐量会下降到每个周期 1 如果微指令来自 DSB 则吞吐量保持在
  • Spring MVC Apache Oltu 和 Salesforce 集成示例 OAUTH_APPROVAL_ERROR_GENERIC :身份验证期间发生意外错误

    我在这里扩展这个问题 https stackoverflow com questions 46530725 java io ioexception server returned http response code 411 for url
  • 如何将gensim Word2Vec模型转换为FastText模型?

    我有一个 Word2Vec 模型 它是在一个巨大的语料库上训练的 在使用这个模型进行神经网络应用时 我遇到了很多 词汇表之外 的单词 现在我需要为这些 词汇表之外 的单词找到单词嵌入 所以我做了一些谷歌搜索 发现 Facebook 最近为此
  • 为什么结构体的字段是“非名称”[重复]

    这个问题在这里已经有答案了 这段代码不起作用 它抱怨 j Bar 是一个 非名字 package main import fmt import os type foo struct Bar string Baz int func main
  • 如何在T4模板中使用DbContext?

    我想使用 EntityFramework 生成一些带有 T4 模板的代码 我在与当前工作的 EF6 DbContext 相同的程序集中创建了一个 T4 模板 lt template language C hostspecific true
  • jQuery 更改输入类型=“文件”的方法

    我试图 100 接受 jQuery 因为它简单而优雅的 API 但我遇到了 API 和直接 HTML 之间的不一致 我无法弄清楚 我有一个 AJAX 文件上传器脚本 可以正常运行 我想在每次文件输入值更改时运行该脚本 这是我的工作代码
  • 网页过滤器破坏了 PrimeFaces 移动视图

    在我使用 PrimeFaces 3 4 2 的 JSF2 1 Web 应用程序中 我添加了一个新网页 其中仅包含一个视图renderKitId PRIMEFACES MOBILE PFM 0 9 3 这个想法是过滤器将来自移动设备的请求重定