升级到 JSF 2.2 后,#{cc.clientId} 在错误的组合中进行评估

2023-11-30

我有一个用 JSF 2.0 + PrimeFaces 3.4 编写的标签库,现在我正在尝试更新到 JSF 2.2 和 PrimeFaces 4.0。 但我意识到传递给组件的属性值是在复合组件中计算的,这会导致渲染的 id 错误。

enum.xhtml(复合组件)

<cc:interface>
           <cc:attribute name="render" default="@this"/>
            .....
</cc:interface>
<cc:implementation>
  <h:selectOneMenu ......../>
  <p:ajax update="#{cc.attrs.render}" process="#{cc.attrs.execute}" />  
</cc:implementation>

usage :

<t:enum id="authenticationSource" value="#{authenticationStrategy}" .....
  render=":#{cc.clientId}:tabView:passwordVisibility"/>

渲染属性值为:#{cc.clientId}:tabView:passwordVisibility, 应该

:j_idt1:j_idt3:j_idt5:editorDialog:j_idt39:j_idt40:tabView:passwordVisibility`

但它被评估为

:j_idt1:j_idt3:j_idt5:editorDialog:j_idt39:j_idt40:tabView:autheticationSource:tabView:passwordVisibility

渲染的属性值在复合组件中进行评估,并导致错误。应该在使用它的地方对其进行评估,就像 JSF 2.0 中的那样。 是否有任何配置属性或任何内容可以克服此错误。

我使用的是 Wildfly 8.1.0-Final


这种复合材料的设计不正确。你不应该使用#{cc.clientId}在复合体的上下文之外。更一般地说,您不应该从复合体外部了解有关复合体内部的任何信息。复合材料本身应该担心这一点。

如果您将复合组件相互嵌套,则此构造将会失败。这#{cc}然后实际上会引用“当前”复合组件。也许您依赖于旧版 JSF 实现中的一个错误,其中#{cc}在嵌套复合组件之后,作用域没有被正确清除(即,它将引用最后分配的值,而不是当前上下文中可用的值)。

也许您只是为了错误的目的而过度使用复合组件,并且只是因为与常规标记文件/包含相比的零配置性质。有关何时确切使用其中一种或另一种的详细信息,请前往何时使用 、标记文件、复合组件和/或自定义组件?就这一点而言,仅当您要将一堆密切相关的组件绑定到一个组件时才使用组合组件。singlebean 属性,因此当然不是具有多个属性的“整个”bean。

如果您绝对肯定复合组件是满足您需求的正确解决方案,并且/或者您已相应地重构了复合组件以消除上述误用,那么有 2 种可能的方法可以在复合组件上应用客户端行为,具体取决于具体的功能要求(如果需要,您甚至可以结合这两种方式)。

  1. 如果你想让复合ajax渲染一个组件outside复合、外化<p:ajax> (or <f:ajax>) as <cc:clientBehavior>:

    <cc:interface>
        <cc:clientBehavior name="myCustomEventName" targets="idOfTargetComponent" event="valueChange" />
        ...
    </cc:interface>
    <cc:implementation>
        <h:selectOneMenu id="idOfTargetComponent" ...>
            <f:selectItems ... />
        </h:selectOneMenu>
    </cc:implementation>
    

    哪个将用作:

    <t:enum ...>
        <p:ajax event="myCustomEventName" update=":absoluteClientIdOfComponentOUTSIDEComposite" />
    </t:enum>
    <x:someComponent id="idOfComponentOUTSIDEComposite" />
    
  2. 如果你想让复合ajax渲染一个组件inside复合体,然后让复合体自己完成这一切。

    <cc:interface>
        ...
    </cc:interface>
    <cc:implementation>
        <h:selectOneMenu ...>
            <f:selectItems ... />
            <p:ajax update="idOfComponentINSIDEComposite" />
        </h:selectOneMenu>
        <x:someComponent id="idOfComponentINSIDEComposite" />
    </cc:implementation>
    

    并按通常的方式使用它:

    <t:enum ... />
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

升级到 JSF 2.2 后,#{cc.clientId} 在错误的组合中进行评估 的相关文章

  • 如何在jsf页面中嵌入java代码?

    我有 一个名为 LoginBean 的托管 bean 名为 login xhtml 的 JSF 页面 在这个 jsf 页面中 我有一个登录表单 在managebean 内部我有一个loginCheck 函数 public void logi
  • 如何使用p:ajax按顺序更新多个组件

    我正在尝试呈现以下 JSF 页面
  • 使 Primefaces 的数据表行在行版本上无效

    我正在使用 JSF 2 1 Primefaces 5 1 开发一个网络应用程序 我有一个带有行版本的数据表 每行有 2inputText 2 selectOneMenu and 1 selectBooleanCheckbox 我想在单击复选
  • RichFaces ExtendedTableDataModel:对列进行排序检索所有行

    我们使用 ExtendedTableDataModel 进行分页 这样做是为了使用 Hibernate 检索一组结果 并在请求另一个页面时加载下一组结果 一切正常 但如果我们在 rich dataTable 中使用 rich column
  • 流范围导航到起始页不起作用

    这与其说是一个问题 不如说是一个注释 对于 Glassfish4 在 JEE7 应用程序中 我尝试使用编程流定义 用 Produces FlowDefinition 注释的 java 类 来使用流范围 我使用 h commandButton
  • 输入字段如 stackOverflow 标签输入字段

    我将 primefaces 与 JSF 一起使用 我需要一个输入组件 允许用户在单个输入字段中提交最多 5 个标签 就像 stackOverflow 上的标签输入字段一样 还必须有一个建议标签的功能 当用户开始输入时 因为它在这里可用 我无
  • Double.toString 对于大值没有指数表示法

    在我的 JSF2 应用程序中 我希望显示双精度值而不使用指数表示法 是否可以 我无法使用NumberFormat or DecimalFormat因为它将把我的数据类型更改为字符串 我从Java文档中了解到 如果我的double值小于10
  • 如何检测 JSF 应用程序中的客户端区域设置?

    我该如何使用ServletRequest getLocale 在 JSF 应用程序中 当Servlet我的代码中不存在并且由 JSF 实现提供 我正在尝试使用ServletContextListener 但是有可能达到ServletRequ
  • 如何在 primefaces 媒体标签中重命名 PDF

    我在 primefaces 中使用流式内容并使用媒体标签来显示它 当在查看器中按下下载按钮时 它会下载名为dynamiccontent properties的文件 有什么办法可以重命名吗 我正在使用 html4 java 7 和 prime
  • 复合组件和 CSS

    I have newcss css formdiv width 30 margin 150 auto 和复合组件
  • 使用 f:ajax 渲染多个组件

    错误的代码是
  • JSF-2 应用程序中的服务器端计时器

    在我正在开发的 JSF 2 应用程序中 当用户执行操作时 我需要启动服务器端计时器 这个计时器必须与应用程序本身相关 因此它必须在用户会话关闭时继续存在 为了解决这个问题 我想使用 java util Timer 类在应用程序范围的 bea
  • 从 ADF Faces JSF 1.2 中的托管 bean 构造函数导航

    是否可以从托管 bean 的构造函数导航到另一个页面 视图 如果发生任何异常 我希望进行此重定向 我尝试了很多方法 Try 1 getFacesContext responseComplete getFacesContext getAppl
  • 对话框不会关闭 primefaces

    我的其中一个页面上有一个对话框 打开很好 如果您使用页面上的按钮 它会关闭 效果很好 但是 如果您尝试 x 退出对话框 它将不会关闭 我相信这与我在对话框上有一个输入字段有关 但我不确定 如果这是一个骗局 我深表歉意 我找不到类似的帖子
  • 如何检测当前的 JSF 版本?

    我正在开发 jsf webapp 现在我需要知道我正在使用什么 JSF 版本 我在哪里可以查到这个 提前致谢 您的意思是 以编程方式 你可以从Package getImplementationVersion http docs oracle
  • jsf 2.0 中看不见的注释? [复制]

    这个问题在这里已经有答案了 是否可以在我的 xhtml 文件中嵌入注释 这些注释仅显示在源代码中 而不显示在渲染结果中 我想在文件中包含作者 日期 但最终用户在生成的输出中不应该看到它们 如果我使用标准评论标签浏览器显示它们 将以下内容添加
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 如何在 JSF 中实现登录过滤器?

    即使用户知道某些页面的网址 我也想阻止某些页面的访问 例如 localhost 8080 user home xhtml 需要先登录 如果没有登录则重定向到 index xhtml 在 JSF 中如何做到这一点 我在谷歌上看到需要一个过滤器
  • 在应用程序服务器上存储 PDF 一段有限的时间并可供下载

    您好 我正在使用 PrimeFaces 5 JSF 2 和 tomcat 有人可以向我展示或给我一个关于如何在应用程序服务器上在有限时间内存储 pdf 的想法吗 我正在使用 tomcat 然后下载它 如果这是用户请求的 此功能与发票相关 因
  • 默认情况下,JSF 生成不可用的 ID,这些 ID 与 Web 标准的 CSS 部分不兼容

    活跃的 JSF 或 Primefaces 用户能否解释一下为什么默认情况下会发生这种情况 为什么没有人对此采取任何措施

随机推荐

  • 线程“LWJGL 应用程序”中的 libGDX 异常

    我一直在关注以下位置的设置教程 libGDX 设置教程 我不确定这里发生了什么事 我终于可以在模拟器中部署项目了 但是 桌面版本不太工作 我已经获取了 gdx backend jogl jar 以及本机 jogl 的副本 但它似乎仍然给出相
  • 延迟加载异常(实体框架)

    I use 实体框架在我的项目中 这个问题是众所周知的 但假设有解决方案 例如this and this 对我不起作用
  • Zend框架1.8推荐的注册插件的方式?

    在 Zend Framework 1 8 中 在 Zend Framework 1 8 中注册新插件的推荐方法是什么
  • 如何在使用 .style 后隐藏列标签

    如何通过 pandas 样式隐藏列标签 有一个 hide index 方法可以删除索引行 不幸的是 hide column 标签会删除整个列 标题和数据 我只是想隐藏标题 谢谢 set table styles 您可以设置style对于桌子
  • 未定义的变量:Laravel 中的错误

    当我想在我的 laravel 项目中注册用户时 页面总是显示 未定义的变量 错误 查看 var www resources views auth register blade php 根据 Laravel 文档 errors应始终自动设置
  • 是否可以在范围报告等步骤之间获得诱惑报告的屏幕截图?

    我在用着allurereport 为我的测试生成报告 早些时候我曾经使用过extent报告 如您所知 在范围报告中 您可以添加日志和屏幕截图以创建它们 但在诱惑报告中 所有屏幕截图都将显示在步骤的末尾 My Question Is it p
  • Visual Studio 2015 RC3 TypeScript Intellisense 不再工作

    我正在使用 TypeScript 1 8 10 和 TypeScript Tools for VS2015 1 8 1 0 Beta 另外 我正在使用 VS2015 RC3 我尝试升级到 TypeScript 2 0 但遇到了完全相同的问题
  • 使用私有 API 扫描 iOS 7 上的网络 (SSID)

    是否可以通过在 iOS 7 越狱设备上使用私有 API 来获取周围网络的 SSID 列表 我知道关于MobileWiFi framework管理 iOS 上的 WiFi 功能 它取代了过时的 Apple80211 框架 这是 4 年前的答案
  • Magento SOAP 2 API 致命错误:过程“登录”不存在

    我收到 致命错误 程序 登录 不存在于 chroot home mystore mystore com html lib Zend Soap Server php 第 832 行 这就是错误的来源 soap this gt getSoap
  • Python:如何从 pandas 列中删除所有非数字值?

    我有一个数据框df像下面这样 Rooms BFS 0 3 5 4201 1 1 5 4201 2 NA 4201 3 NA 4201 4 5 5 4201 5 5 4201 6 4 5 4201 7 3 4201 8 4201 9 3 42
  • 在 R 正则表达式中获取文本段落中超过 1 个引用

    首先 找到引用 我想要这里的所有内容 内的文本 第二 在引文前摘录1句话 如果可能的话 我想通过查看 R 中的正则表达式来实现所需的输出 Example Yoyo He is sad Oh no Don t sad Yeah Testing
  • 如何使用ThreadException?

    我尝试使用 http msdn microsoft com en us library system windows forms application threadexception aspx Y399 但当我这样做时 throw new
  • Gradle 无法检测 osDetector 插件

    我正在将 OpenSSL 用于我的 Java GRPC 项目 该项目使用 gradle 我读了文档其中提到我们应该按照本节中提到的进行安全设置link 我已将 osDetector 插件包含在 build gradle 文件中 但是当我构建
  • 单击 Viewpager Xamarin Android

    我是 Xamarin Android 开发新手 我使用以下命令创建了图像滑块浏览器 现在我想单击该 ViewPager 的图像 我该如何实现呢 我已经尝试过这个但没有成功 viewpage mview FindViewById
  • 目标无法访问,标识符解析为 null

    我正在尝试在外部服务器上运行 j2EE 项目 项目是在 NetBeans 6 7 1 中制作的 当我从那里运行它时 一切都很顺利 我在 GlassFish v3 服务器上运行它 但是当我从 asadmin 脚本运行 GlassFish 并向
  • UWP C# 禁用方向更改动画

    是否可以禁用当手机旋转发生变化 从横向变为纵向或反之亦然 时执行的 屏幕旋转 动画 你需要使用DisplayInformation AutoRotationPreferences DisplayOrientations LandscapeF
  • :remote => true 和 url_for,如何做到这一点?

    我正在尝试使整个 div 标签可点击 我尝试使用的代码如下 当我添加 remote gt true 它会抛出 Too much args 错误 2 for 1 Code div div url for 不接受 remote gt true争
  • 从脚本启动 Spring boot 应用程序

    使用普通的 spring mvn 命令 我可以从命令行启动 spring boot 应用程序并使用 Control c 终止它 不过 我已经创建了一堆服务 稍后我将对其进行 dockerize 现在它们是由 mvn 生成的普通 java j
  • JSTree 拖放问题

    我将 JSTree 与 ASP net 一起使用 为树生成的 html 看起来像 ul li a href node 1 a li li a href node 2 a li li a href node 3 a li li a href
  • 升级到 JSF 2.2 后,#{cc.clientId} 在错误的组合中进行评估

    我有一个用 JSF 2 0 PrimeFaces 3 4 编写的标签库 现在我正在尝试更新到 JSF 2 2 和 PrimeFaces 4 0 但我意识到传递给组件的属性值是在复合组件中计算的 这会导致渲染的 id 错误 enum xhtm