问题标签 [jsf-2.3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jsf - 使用 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 导致 viewParam 为空
我正在尝试将应用程序从 WildFly 13(Java EE 7、JSF 2.2.15)切换到 WildFly 16(Java EE 8、JSF 2.3.9)。尝试了 PrimeFaces 6.2 和 7.0
在 web.xmljavax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
中设置。JSF 2.2 版本工作正常,切换到 WildFly 16 这种不同的行为。一个简单的例子如下:
说明:访问:http://localhost:8080/primefaces-test/?tipo=U&test=Bah 点击第一个按钮,点击第二个按钮。在 ajax 之后,bean 中的 viewParam 值为 null,即使它填充在 url 中。
示例项目(码头):https ://github.com/erickdeoliveiraleal/primefaces-test/tree/update
XHTML
豆
jsf - 如何在错误页面上修复 FacesContext 注入
我有带有标准 JSF 异常处理的 JSF 2.3 WAR 项目。请求中的任何错误都会分派到 .jsf 中配置的错误页面web.xml
。我还使用新的 JSF 2.3改进的 CDI 支持来注入 FacesContext。
问题是当在序数页面上出现一些未处理的错误并且 jsf 将请求分派到错误页面时。然后我得到一个IllegalStateException
in com.sun.faces.context.FacesContextImpl.assertNotReleased
。
经过一些调试后,我意识到问题出在我注入FacesContext
两个视图时。这种情况下的关键问题是,注入FacesContext
存储在请求范围中,当它在错误页面上再次注入时,FacesContext
存储在请求范围中已经被释放并过时,因为它在创建错误页面时再次创建。
为了展示这种情况,我制作了一个在 WildFly 16.0.0.Final 上运行的小型演示项目,index.xhtml
页面简单:
和error.xhtml
:
我web.xml
的是:
在尝试显示后,index.jsf
我遇到了以下异常:
最后,我不确定这是 JSF 错误还是设计使然,我应该以不同的方式使用它?
jsf - 多在
我正在使用 JSF 2.3 开发一个 CMS。我需要向每个页面传递一个 GET 参数,指示用户正在管理的站点。为此,我<f:viewParam>
在所有页面中都使用,但我有以下疑问:
<f:viewAction>
可以像下面的示例那样对多个托管 bean使用多个吗?
这行得通,但我不确定它是否可以。
- 有没有办法避免在每个页面中复制
<f:viewParam>
站点参数?我尝试使用 includeViewParams,但如果我不包含<f:viewParam>
在源页面和目标页面(从 page1.xhtml 到 page2.xhtml)中,则不起作用
3) 我可以定义多个<f:metadata>
标签吗?例如,如果我使用模板和多个 ManagedBeans 页面(一个用于标题,一个用于菜单等)。
谢谢你,对我的英语感到抱歉。
jsf - 为什么@Model 是@RequestScope 而不是@SessionScope 或@ViewScope?
我阅读了关于JSF 支持 bean 结构(最佳实践)的答案 和这篇关于同一主题的文章,我真的很困惑。
在答案和文章中,模型bean 是会话范围的,但javax.enterprise.inject.Model @Model
注释是请求范围的。
在文档中它说:
内置原型用于定义 MVC Web 应用程序架构(如 JSF)的模型层的 bean。
我认为这是一个矛盾。
什么是真正的用途,@Model
为什么它是@RequestScoped
?我应该为模型豆使用什么,并且引用的答案仍然适用吗?
java - JSF 2.3 整个 bean 验证丢弃了所有字段。是有意的吗?我用错了吗?
我有一个表格,可以说 3 个字段:
- 密码提示
- 密码
- 再次输入密码
我有一个包含这 3 个字段的 bean,并且我有一个类级别的验证器,它检查 bean 是否有匹配的password
和password again
字段。想象一个非常相似的设置,就像它在https://github.com/AnghelLeonard/JSF-2.3/tree/master/JSF23ValidateWholeBeanExample
我面临的问题是,我输入 a password hint
, apassword
和 a non matching password again
。在这种情况下,我清除了整个表单,因为在我看来,WholeBeanValidator 阻止 JSF 将任何值保存到模型中。相关代码的地方在com.sun.faces.ext.component.WholeBeanValidator.validate(FacesContext, UIValidateWholeBean, Object):
在这种情况下,我认为将模型值保留在字段中并获取全局错误消息会很好。但是,这些值不会进入 bean。我理解错了吗?你能帮我解决这个@BalusC :) 吗?
jsf - 模拟点击不管用
我需要使用<h:inputFile>
. 我正在使用以下代码:
正如你所看到的,我隐藏了丑陋的<h:inputFile>
东西,只是用一个按钮来模拟点击它。
当我单击该按钮时,将显示文件资源管理器并且我可以选择一个文件,但是一旦选择,页面就会重新加载并且processFile
永远不会调用该方法。
如果我删除隐藏类<h:inputFile>
,单击它并选择一个文件,一切正常。
我尝试用<h:inputFile>
可见来模拟点击,但发生了同样的错误行为。
我能做些什么来模拟点击并保留<h:inputFile>
隐藏。
我正在使用带有 JSF 2.3 的 Wildfly。
谢谢
jsf - h:commandLink 与 f:ajax 不呈现
从 Wildfly 8 迁移到 16 和 Java 8 到 11 之后,我一直面临这个影响 JSFh:commandLink
和f:ajax
.
我试图渲染:mainform
, mainform
, @form
... 但没有一个工作。我必须手动重新加载页面才能看到更改。
WF8 和 java 8 一切正常。
我该如何解决?
编辑:我尝试使用 Richfaces 和a4j:commandLink
:
和
仍然没有渲染..状态已更改但页面表单未刷新。
编辑:经过一些研究,javascript渲染似乎是一个错误:当我删除此功能时渲染工作:
jsf-2.2 - 了解 jsf.ajax.request 中的 JSF options.params
我们将基于 JSF 2.2 的应用程序迁移到 JSF 2.3,除了一些较小的问题外,我们能够让一切正常运行。对于一种视图,我们使用 Butterfaces JSF 组件,尤其是树组件。在 JSF 2.3 中,无法选择一个节点并在另一个容器中显示该节点的详细信息。适当的 Ajax 请求将节点的 id 发送为options.params
. 这适用于 JSF 2.2,但不适用于 JSF 2.3。我们仍在使用 Butterfaces 2(由于向下兼容性应该可以工作),但即使在 Java EE 8 上的 Butterfaces 3 展示中,通过 Ajax 进行的选择似乎也不起作用。
我查看了jsf.ajax.request
JSF 2.3 的 Javascript 方法,对其进行了调试并意识到该参数被忽略并删除,因为它似乎是错误的格式。因此,我用这个愚蠢的代码片段在我们的应用程序中修补了方法,以通过 ajax 请求将参数发送到服务器:
就是这样,它又可以正常工作了。
所以我的问题是,问题应该出在哪里。忽略这些参数在 JSF 中是否存在问题。还是Butterfaces以错误的方式使用参数的问题?什么是正确的方法,使用options.params
?
提前致谢
primefaces - 使用带有 Hazelcast 的 Spring-Session 集群时 ViewScoped bean 的意外行为
我正在努力将集群引入基于 JSF 的 Spring-Boot Web 应用程序,一旦我们使用 Hazelcast 启用会话复制,我们就开始注意到我们的几个使用 ViewScoped bean 的 JSF 页面不再正常运行。如果我们禁用会话复制和 Hazelcast,则不再发生奇怪的行为。
我首先在我们的一个使用 PrimeFaces 向导组件的页面中注意到了这个问题。当“提交”第二页时,在向导第一页上输入的值将丢失。
然后在另一个页面上,我注意到命令按钮不再调用托管 bean 上的 actionListener 方法。我在方法中设置了一个断点,断点永远不会被击中,但是页面“闪烁”并刷新回其初始状态。我确实注意到托管 bean 上的 PostConstruct 方法不会再次调用,因此它不会生成 ViewScoped bean 的新实例。
但是,当我禁用会话复制和 Hazelcast 时,这些问题都不会发生。据我所知,检查会话及其内容,看起来确实会话正在创建并正确存储,据我所知。
该应用程序是一个 Spring-Boot Web 应用程序,使用 joinfaces 启动器引入 JSF 2.3.7 (Mojarra)、PrimeFaces 6.2 和 Omnifaces 1.14.1。我们最初在没有任何会话复制的情况下开发应用程序,并且我们的 ViewScoped bean 没有问题。
ViewScoped bean 使用 org.springframework.stereotype.Component 注释,就像您在 joinfaces 示例中看到的一样,并使用 javax.faces.view.ViewScoped 作为范围注释。我还尝试引入 Weld 并使用 @Named 注释,以及使用旧的不推荐使用的 JSF @ManagedBean 和 @ViewScoped 注释,但在所有情况下都存在相同的行为。
我已经完成并确保我们的 ManagedBeans 以及 bean 本身的任何属性都是完全可序列化的。
为了演示我所看到的,我从网络上的几个地方挑选了两个非常简单的示例,并创建了一个简单的 Spring-Boot 项目,您可以自己克隆和运行它。
https://github.com/illingtonFlex/ViewScopeDemo
此演示应用程序包含两个托管 bean 和两个 xhtml 文件。
第一个示例是从 BalusC 网站上的示例复制而来的:http: //balusc.omnifaces.org/2010/06/benefits-and-pitfalls-of-viewscoped.html
xhtml 文件如下所示:
支持此页面的 ViewScoped bean 如下所示:
如果您启动应用程序并导航到 localhost:8080/index.xhtml,请单击其中一个条目上的编辑。然后在文本字段中输入新名称并单击保存。托管 bean 上的 save 方法永远不会被调用,并且页面“重置”到它的初始状态。如果您通过注释掉 @EnableHazelcastHttpSession 注释以及 ViewScopeDemoApplication 中定义的 hazelcastInstance @Bean 来禁用 Hazelcast 和会话复制,则上述示例步骤有效。调用 save 方法,更改编辑项的名称。
为了演示另一个奇怪的 ViewScoped 行为示例,我从 PrimeFaces 展示中逐字复制了向导示例代码: https ://www.primefaces.org/showcase/ui/panel/wizard.xhtml
启动应用程序后,您可以通过 localhost:8080/wizard.xhtml 访问此示例
启用 Hazelcast 和会话复制后,您可以在 onFlowProcess 方法中设置一个断点,该断点在从向导的一个页面导航到下一个页面时触发。您可以看到在向导第一步中输入的值在随后的向导页面更改中丢失(它们变为空)。禁用 Hazelcast,值会在整个向导选项卡范围内保持不变。
当问题发生时,我没有在日志中看到任何错误或异常。我也没有在浏览器调试控制台中看到任何问题。但是,从这两个示例中可以清楚地看出,ViewScoped bean 的行为取决于是否启用了 Hazelcast 会话复制。
提前感谢您的帮助和考虑!
jsf - Ajax 事件“选择”不适用于 JSF 2.3 中的 h:selectOneMenu 而它在 2.2 中工作
我使用 Mojarra、primeFaces 6.2 和 Liberty server 18.0.0.4 版本在 JSF 2.2 中开发了项目。现在正在升级到 JSF 2.3。我在我的项目类路径中添加了 jar 文件 javax.faces.2.3.8.jar。当我运行项目时出现以下错误,
下面是 h:selectOneMenu 的 .xhtml 代码
JSF 2.2 运行良好,没有任何问题。在 JSF 2.3 中,我面临上述问题。