JSF 2.3 中的 f:websocket

Posted

技术标签:

【中文标题】JSF 2.3 中的 f:websocket【英文标题】:f:websocket in JSF 2.3 【发布时间】:2018-09-26 00:44:54 【问题描述】:

我试图让 BalusC 的 JSF 2.3+ 示例 (How can server push asynchronous changes to a html page created by JSF?) 使用 JBoss WildFly 12.0.0.Final 工作

我已经添加了 JBoss JSF JAR:

jboss-jsf-api_2.3_spec-2.3.3.SP1.jar

但是,当我尝试显示我的 XHTML 页面时:

<h:form>
    <f:websocket channel="push">
        <f:ajax event="updateNotifications" render=":panelGridSelect" />
    </f:websocket>
</h:form>

我明白了:

javax.faces.view.facelets.TagException: /enterProduct.xhtml @61,45 标签库支持命名空间: http://xmlns.jcp.org/jsf/core,但没有为名称定义标签: 网络套接字

在 IntelliJ IDEA 中:

f:websocket

显示为红色,好像找不到?

f:websocket 的标签库在哪里?

【问题讨论】:

“我已经添加了 JBoss JSF JAR:” 你在哪里添加的? Wildfly 12 本身已经自带:mvnrepository.com/artifact/org.wildfly/wildfly-jsf/12.0.0.Final 我添加到我的 IntelliJ 库中,试图摆脱红色突出显示的:,当我将鼠标悬停在它上面时显示错误:“无法解析符号 f:websocket”。不要包含在我的 EAR 中,因为您正确地说它在 WildFly 12.0.0.Final 模块 javax.faces 中 但它是(偶然?)在耳边的战争? 哦,如果我没看错的话,Wildfly 12 默认使用 JSF 2.2。您必须将其切换到 2.3,这是第一个包含 f:websocket 的版本 【参考方案1】:

f:websocket 从 JSF 2.3 开始可用,虽然 Wildfly 12 包含 一些 JavaEE 8 功能,但它默认以 JavaEE 7 模式启动,即“只是”JSF 2.2。

最近(编辑:在撰写本文时 ;-))WildFly 12 release documentation

WildFly 12 默认以 EE7 模式启动。为了使用这些新功能,您必须启用 EE8 预览模式。这可以通过在启动期间传递 ee8.preview.mode 属性来完成:

./standalone.sh -Dee8.preview.mode=true

还有其他选项可以启用此功能。来自相同的文档:

或者,这可以通过使用新的standalone-ee8.xml 配置启动服务器来实现,该配置只是将属性包含在配置中。

./standalone.sh -c standalone-ee8.xml

CLI 也可用于修改现有配置以添加此属性。例如:

embed-server --admin-only=true /system-property=ee8.preview.mode:add(value=true) stop-embedded-server

然后您应该拥有 JSF 2.3 和 f:websockets

【讨论】:

太棒了!而且我什至不使用 WildFly 12(但仍然在 11 上)。只是做了一些创造性的谷歌搜索和思考。

以上是关于JSF 2.3 中的 f:websocket的主要内容,如果未能解决你的问题,请参考以下文章

升级到 JSF 2.3 后,@Inject 在 @FacesConverter 中不起作用

JSF-2.3 找不到我的 @Named CDI-1.2 托管 bean

JSF 2.3 无法通过 Tomcat 9 支持 WebSocket

JSF 2.3 与 Spring 4.3 @Inject @ManagedProperty 问题

如何使用指定版本2.3的JSF Facet创建Eclipse动态Web项目?

如何使用 netbeans 8.2 在 Wildfly 13 中运行 jsf mojarra 2.3?