问题标签 [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 - 如何以托管 bean 接口作为参数在选定的 XHTML 之间共享 f:metadata 的一些 f:event
注意到从JSF 视图元数据揭秘:
由于这个标签是关于当前视图元数据的,它不参与 XHTML 模板(页面作者必须确保该元素不会出现在模板或包含的页面上;它可以在模板客户端中)并且它是
<f:view>
.
我有多个<f:viewParam>
,并且<f:event>
在许多 XHTML 页面中重复出现,而这些页面又是template.xhtml
. 每个都f:event
依赖于一个给定的托管 bean,其中每个 XHTML 页面的托管 bean 是不同的(但尊重一个公共接口,即,对于每个相关的托管 bean 存在相同的侦听器操作):
问:如何封装共享<f:viewParam>
和<f:event>
部分,以便它可以“包含”并作为公共策略片段处理,并为每个 XHTML 页面传入特定的托管 bean(满足公共接口)?
jsf - 带有泛型的 JSF 2.3 自定义转换器
我们现在开始在我们现有的 JSF 2.2 项目中使用 JSF 2.3。在我们的自定义转换器上,我们收到警告Converter is a raw type. References to generic type Converter<T> should be parameterized.
我们遇到的问题是当我们尝试使用泛型修复该警告时:
当转换器用于例如
然后抛出ClassCastException
消息。java.lang.String cannot be cast to MyCustomObject
stacktrace 中还有一行可能会有所帮助com.sun.faces.cdi.CdiConverter.getAsString(CdiConverter.java:109)
。
但是当转换器泛型定义从更改MyCustomObject
为Object
:
然后一切都按预期工作,但这显然超出了Converter<T>
界面的目的。
jsf - p:dataTable 如何防止在第一行上调用 f:viewParam 编辑然后在 XHTML 级别使用 JSF“勾选保存”(不在 Java 中的支持 bean 中)
编辑:2017-04-28 这里描述了完全相同的问题(不同的情况/应用程序):Process f:viewParam only on page load
Primefaces 6.1.RC2
JSF 莫哈拉 2.3.0
我已经有一个基于 Java backing-bean 的解决方法(如下所述),用于解决以下p:dataTable
原因的问题,但我对这种解决方法不太满意,我想p:dataTable
更好地理解行编辑的行为,如果可能的话我会想为我的问题找到一个纯 XHTML 级别的解决方案。(顺便说一句,我在其他方面非常有经验p:dataTable
,多年来我已经将其用于一些非常复杂的应用程序。)
这与 中的错误或错误无关p:dataTable
,但它在行编辑期间的行为方式在一种情况下给我带来了问题。
以下代码示例完全简化并适用于本论坛。
我有一个实体元素,它有一个关系List<Link> getLinks()
,其中链接也是一个实体。
Element 有一个编辑器edit.xhtml
。
目的是拥有一个links_editor.xhtml
可以嵌入到edit.xhtml
.
有一个符合 CDI 的@ViewScoped @Named
支持 bean Manager
。
edit.xhtml 依赖于f:viewParam
加载一个元素进行编辑:
在支持 bean 中的位置Manager
:
并且在links_editor.xhtml
:
行编辑监听器:
(JsfUtil
显然只是利用FacesContext.getCurrentInstance().addMessage(...)
)
问题/担忧:
p:dataTable
如果我第一次编辑 Link 行,然后使用“tick save”,onLinkRowEdit
则调用侦听器,但诊断显示该值似乎没有改变。原因是它f:viewParam
被调用:
这(通过未详细显示的路由)Element
再次从数据库加载实体 via setId(Long id)
,因此在复合组件中edit_links.xthml
这实质上会重置#{cc.attrs.element.links}
,因此任何更改都将被丢弃。
有趣的是,如果(不重新加载整个@ViewScoped 页面)第二次编辑未调用的同一p:dataTable
行,然后它会按需要工作。f:viewParam
一种解决方法(相当骇人听闻)是“阻止”任何在视图范围支持 bean 中通过 id 重新加载 Element 的尝试Manager
:
需要明确的是,我知道在支持 bean 中的 JSF 下频繁访问的信息的获取器中使用 @PostConstruct 和/或惰性数据库获取的常用策略。而且我不想在这里f:viewParam
完全放弃这种方法(并且它适用于同样使用相同 Manager bean 的其他情况)。
我特别感兴趣的是 Primefaces p:dataTable
:
Q1:当行信息(在这种情况下)显然已经可用时,为什么p:dataTable
需要在第一行编辑期间调用然后“勾选保存”?f:viewParam
element.links
Q2:为什么不需要在第二行编辑期间p:dataTable
调用然后“勾选保存”?f:viewParam
Q3:是否有一种基于 JSF XHTML 的方法来防止在 rowEdit 然后“勾选保存”(包括第一次)期间p:dataTable
调用?f:viewParam
更新:2017-04-21:现在有一个适用于 NetBeans 8.2 的迷你测试 Web 应用程序,在以下位置演示了该问题:
https://github.com/webelcomau/Webel_PrimeFaces_test_p50445_dataTable_fviewParam
请下载主 ZIP 存档,解压缩,然后在 NetBeans IDE 8.2 中打开它。您不需要 Git 克隆项目。确保将 Glassfish-4.1.1 设置为项目的服务器。
那里的自述文件和网络应用程序测试页面本身都提供了重现问题(或与我有关的行为)的精确步骤。
我已经投入了一些精力来分析这个,因为我p:dataTable
在编辑表单中使用了很多“嵌入” f:viewParam
,并且我想更好地理解这个问题,即使它不是一个实际的问题p:dataTable
。
jsf - JSF:如何避免“组件 ID 已在视图中找到。” 复合元件双插入错误
我知道是什么导致了以下问题。我正在寻找一种优雅的方法来解决问题,而不是我发现的蛮力(和非 DRY)解决方法。
我在模板中有一个高度可重用h:form
的(我知道“上帝形式”的危险,这不是一个上帝形式),我通过模板将可编辑的内容插入到该表单中,具有相同的命令操作栏页面顶部和底部的按钮。(这个模板有数百个客户端,有些在模板中插入了不同的操作栏。)
我这样做的唯一原因(顶部和底部)是用户方便;我发现在使用许多内容管理系统时,必须向下滚动或向上滚动才能在长表单上找到保存按钮(或操作栏中的其他按钮),这很烦人。
模板(请不要告诉我这是“神形”)有:
作为模板客户端的每个edit.xhtml
页面(有很多页面)都会插入操作栏,以及兼容的#{manager}
支持 bean 参数:
请注意上面我是如何给 CC `util:edit_actions' 一个 id 的(直到最近我才在这个 CC 上这样做,原因我将在下面解释)。
因此,您可以看到完全相同的操作工具栏被插入到页面表单部分的顶部和底部。但是,如果您按照上面所示的方式执行此操作,并为edit_actions
您传递了一个 id,则会得到:
多年来,我一直在成功使用这个模板,直到我引入了显式 id,原因如下所示。
CC 有一些命令按钮,edit_actions
例如:
现在,一般的保存按钮并不总是表单中的唯一按钮;有时还有其他按钮可以使用有条件的输入字段执行临时 AJAX 操作,例如来自嵌入式链接表编辑器的按钮:
(顺便说一句,urlValidator
在不抛出 null 的情况下,系统依赖于条件required
,以便一般@form
Save 始终有效。)
但是要获得工作所需的条件:
每当在使用它的数百个edit.xhtml 客户端页面中的任何一个中执行插入时,我都必须给插入的edit_actions
CC 一个显式 ID :
但如上所示,如果我确实在其中包含了 id,它现在会导致错误(但没有它我不能使用条件required
技巧)。
到目前为止,我发现了两种解决方法:
只是没有两次模板中的操作栏。这是不可接受的,它只是通过避免它来破坏该功能。
在模板中有 2 个不同的插入点确实有效,但您必须小心使用 ID。
第二个问题是:
请注意,上面的代码不是Don't Repeat Yourself (DRY)代码,我认为它是最重要的编码实践之一,而且 JSF 通常特别擅长处理。确保上述模板插入模式和 id 模式在数百edit.xhtml
页中得到解决只是容易出错,除非我能以某种方式封装该ui:define
对,同时仍然能够注入任何兼容#{manager}
的 .
然后条件要求的测试必须在上下保存按钮上进行测试:
总而言之,一个相当丑陋的非 DRY 解决方法。
Q1:有什么办法可以自动动态更改插入的edit_action.xhtml的id,以便它可以出现在模板中的2个不同位置,而不会出现冲突的组件id错误?
Q2:或者,是否有某种方法可以将两者封装在ui:define
上杆和下杆插入的解决方法中(如解决方法 2 中所示),同时仍然能够注入#{manager}
(以便我可以包含它并重用它作为模板中数百个edit.xhtml客户端的封装策略)?
编辑:这种封装我的“双动作栏”模式的尝试似乎不起作用。来自/include/edit_actions_defines.xhtml
:
尝试使用edit.xhtml
:
似乎被默默地忽略了。
cdi - JSF 2.3 与 Spring 4.3 @Inject @ManagedProperty 问题
我已经Faces-Config.xml
设置为web-facesconfig_2_3.xsd
. 获得了 JSF 2.3 的最新 jars。使用 JSF 和 Spring 的 CDI 注释,创建了两个具有请求范围的 bean,并尝试从另一个 bean 注入托管属性paymentBean
。按照这个链接。
它抛出以下异常:
jboss-eap-7 - JSF 2.3 on EAP 7
I would like to upgrade to JSF 2.3 on an Jboss EAP 7.
I followed this guide:
I splitted the JSF 2.3 jar following this guide:
How to install one jar variant of JSF (javax.faces.jar) on WildFly
However, when I start EAP 7 I get this error:
Does anybody successfully upgraded EAP 7 to JSF 2.3?
file-upload - 在 Liberty 服务器上的 JSF 2.3 中未调用 fileUploadListener
我们最近升级到 JSF 2.3,并且 p:fileUpload 停止调用 fileUploadListener。在 Jetty 上运行时它仍然可以完美运行,但在 Liberty 上却不行。我们正在使用 PrimeFaces 6.0。
这是解决方法的已知问题吗?
jsf - JSF 2.3 不适用于 Tomcat 8
我正在尝试在 Tomcat 8 上测试 JSF 2.3 的新功能,但没有任何效果。
与 JSF 2.2 兼容的代码可以在此配置中正常工作,但对于新的 JSF 2.3 功能,它会失败。
例如,以下代码导致应用程序启动失败。
WELD-001408: Unsatisfied dependencies for type FacesContext with qualifiers @Default
我的配置文件如下。
POM.xml 文件https://pastebin.com/84MEw2aS
上下文.xml
豆类.xml
web.xml
版本
- Apache Tomcat 8.0.27 或 Apache Tomcat 8.5.14
- JDK 8。
- NetBeans8.2
- JSF 2.3
- 焊接 2.4.3
- Omnifaces 2.6.2
Tomcat日志如下
登录Tomcat https://pastebin.com/fufUfQtj
以下代码导致错误
我究竟做错了什么?
cdi - 未在 JSF 2.3 FacesConverter 中注入 ApplicationScoped bean
我有以下 FacesConverter:
引用的 CDI bean 是:
Faces-config.xml 是:
现在,无论我通过 @Inject 注入哪种 bean,它始终为空。似乎 2.3 中的注入功能(还)不起作用,或者我遗漏了一些东西:)
我在 EAP 7.0 上使用 Mojarra 2.3.0。还在 EAP 7.0 和 7.1 上使用 2.3.3 进行了测试,但未成功。
我当前的解决方法是替换需要注入 CDI bean 的代码,如下所示:
这很好用,但当然有点丑:)
有人经历过这种行为吗?
maven - JSF-2.3 找不到我的 @Named CDI-1.2 托管 bean
最近从 2.2 升级到 JSF 2.3,我注意到 @ManagedBean 已被弃用,经过一些研究发现我应该使用 CDI-1.2 托管 bean 和 @Named 注释。
但是在切换到 @Named 之后,JSF 页面找不到托管 bean:
javax.servlet.ServletException: /index.xhtml @38,38 value="#{controller.telstraPass}": 目标不可达,标识符“控制器”解析为空
我正在使用 Maven、eclipse 和 WebSphere Application Server liberty v16.0.0.4 不知道我做错了什么,以下是相关文件:
控制器.java:
索引.xhtml:
web.xml
服务器.xml:
pom.xml:
面孔-config.xml:
我的 WEB-INF 文件夹中还有一个空 beans.xml 文件,其中包含我的 web.xml 和 faces-config.xml。
据我所知,我做的一切都是正确的,我没有 JSF 或 CDI 的竞争实现,也没有使用 JSF 包中的任何范围。我完全不知道为什么这不起作用......