Liferay 7 JSF 操作未触发

Liferay 7 JSF actions not triggered

我有一个用 JSF 2 Richfaces 编写的 liferay portlet 应用程序部署在 weblogic 下。

页面呈现良好,似乎 EL 解析器做得很好。

然而,只要我发起任何类型的提交,页面就会重新加载,什么也没有发生。

我在网上找到了几个解决方案,大部分归结为这个解决方案:

Why isn't Liferay Faces processing JSF portlet action events?

我还在 Liferay 的官方 JSF richfaces 展示应用程序中找到了这些 liferay-porlet.xml 设置,所以我已经尝试过了。

问题是,一旦我添加:

<requires-namespaced-parameters>false</requires-namespaced-parameters>

我的 liferay-porlet.xml portlet 变得不可见,所以我无法验证它是否解决了问题。

有没有人遇到过类似的问题?有没有人有什么建议?我还查看了 post:

中提出的建议

action method is not called in JSF

None 似乎适用于我的情况。我已经精简了我的申请。这似乎是 Liferay 的问题。

使用的版本:

Liferay 7.0
RichFaces 4.5.17
com.liferay.faces.bridge.impl 4.1.1
com.liferay.faces.bridge.ext 5.0.2
com.liferay.faces.bridge.api 4.1.0
javax.faces 2.2.14

您有两个选择:

  • 将以下内容添加到您的 WEB-INF/web.xml 文件以确保 JSF 正确处理命名空间参数:

    <context-param>
        <param-name>com.sun.faces.namespaceParameters</param-name>
        <param-value>true</param-value>
    </context-param>
    

    一些组件库可能无法处理命名空间参数,但我很确定 PrimeFaces、IceFaces 和 RichFaces 可以(可能 BootsFaces 和 ButterFaces 也可以)。

  • 将以下内容添加到 WEB-INF/liferay-portlet.xml<portlet> 部分:

    <requires-namespaced-parameters>false</requires-namespaced-parameters>
    

您似乎尝试了 #2,但您可能将配置包含在了错误的位置。这很可能导致错误,进而导致您的 portlet 部署失败。检查 DTD 以确保您的配置顺序正确:https://docs.liferay.com/ce/portal/7.0-latest/definitions/liferay-portlet-app_7_0_0.dtd.html