UI 布局初始化错误 PrimeFaces 6.2

2023-12-11

下面的代码可以很好地工作PrimeFaces 6.0 and 6.1,但与6.2当我点击按钮时Validate我看到带有消息的对话框:

/ UI Layout Initialization Error  
The center-pane element does not exist.  
The center-pane is a required element.

I Use: JSF 2.2, PrimeFaces 6.2, Tomcat 8.5.23

是代码有问题还是问题出在PrimeFaces 6.2 ?

enter image description here

公司.java

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import com.company.helper.MessagesHelper;

@ManagedBean(name = "company")
@ViewScoped
public class Company implements Serializable {

    private static final long serialVersionUID = -8386148997526982963L;

    private String regNumber;

    public void validateRegNumber() {
        if(regNumber == null || regNumber.equals("")) {
            MessagesHelper.addMessageError("Invalid Registration Number!");
        } else {
            MessagesHelper.addMessage("Registration Number is Valid!");
        }
    }

    public String getRegNumber() {
        return regNumber;
    }

    public void setRegNumber(String regNumber) {
        this.regNumber = regNumber;
    }
}

MessagesHelper.java

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

public class MessagesHelper {
    public static void addMessage(String summary) {
        addMessage(summary, null);
    }

    public static void addMessageError(String summary) {
        addMessageError(summary, null);
    }

    public static void addMessage(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public static void addMessageError(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
}

验证.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui" 
    template="../templates/template.xhtml">    
    <ui:define name="content">
        <h:form id="frmValidate">
            <p:growl id="msgs" showDetail="true" /> 
            <div class="ui-fluid">  
                <div class="ui-grid ui-grid-responsive">
                    <div class="ui-grid-row">
                        <p:outputLabel for="regNumber" value="Registration Number: "></p:outputLabel>                               
                        <p:inputText id="regNumber" styleClass="inputClass" value="#{company.regNumber}" />
                        <p:commandButton value="Validate" id="btnValidate" ajax="false" action="#{company.validateRegNumber()}" />  
                    </div>
                </div>
            </div>
        </h:form>
    </ui:define>
</ui:composition>

页脚.xhtml

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html">
    <center>
        <h:outputText style="font-size:13" value="Company Name 2018" />
    </center>
</ui:composition>

header.xhtml

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <center>
        <h:form id="formWelcome">
            <p:toolbar id="toolbarWelcome">
                <p:toolbarGroup align="left" styleClass="my-toolbar-group-left">
                    <h:outputText value="Project Name" />
                </p:toolbarGroup>
                <p:toolbarGroup align="right">
                    <p:outputLabel for="uname" value="Username:" />
                    <p:outputLabel id="uname" value=" myUserName" />
                </p:toolbarGroup>
            </p:toolbar>
        </h:form>
    </center>
</ui:composition>

菜单.xhtml

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <h:form>
        <p:panelMenu style="width:212px">
            <p:submenu label="Main Menu">
                <p:menuitem value="Submenu 1"/>
                <p:menuitem value="Submenu 2"/>
            </p:submenu>
        </p:panelMenu>
    </h:form>
</ui:composition>

模板.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core" >

<f:view contentType="text/html" encoding="UTF-8">
  <h:head>
   <f:facet name="first">
       <link rel="shortcut icon" type="image/x-icon" href="#{resource['images/favicon.ico']}" />  
       <meta http-equiv="X-UA-Compatible" content="IE=edge" />
       <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
       <title>Project Name</title>
   </f:facet> 

    <f:facet name="middle">
        <h:outputStylesheet name="css/style.css" />
   </f:facet>
 </h:head>
   <h:body>
    <p:layout fullPage="true" resizeTitle="resize">
        <p:layoutUnit  position="north"  id="north" size="60" resizable="false">
            <ui:include src="header.xhtml" />
        </p:layoutUnit>

        <p:layoutUnit id="west" position="west" size="220" resizable="false" gutter="2" header="Actions" effect="slide" collapsible="true" >
            <ui:include src="menu.xhtml" />
        </p:layoutUnit>

         <p:layoutUnit id="center" styleClass="layoutUnitCenter" position="center" resizable="false">               
                <!-- For PrimeFaces <= 6.1 -->
                <!-- 
                    <p:messages id="msgs" showSummary="true" autoUpdate="true" />
                    <ui:insert name="content" />
                 -->

                <!-- For PrimeFaces == 6.2 -->
                <p:fragment>
                    <p:messages id="msgs" showSummary="true">
                        <p:autoUpdate />
                    </p:messages>
                </p:fragment>
                <ui:insert name="content" />
        </p:layoutUnit>

        <p:layoutUnit position="south" resizable="false" id="south" closable="false" collapsible="false">
            <ui:include src="footer.xhtml" />
        </p:layoutUnit>
    </p:layout>
    </h:body>
</f:view>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                        http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">

    <display-name>Project</display-name>

    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>    
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <enabled>true</enabled>
        <async-supported>false</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
</web-app>

PrimeFaces 6.2 中的一个错误会导致此问题。
该错误已在 PrimeFaces 6.2.1 中报告并得到解决

更多信息可以在这里找到:https://github.com/primefaces/primefaces/issues/3457

正如 melloware 在上面的链接中提到的,在 web.xml 中添加以下代码可以解决此问题。

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

UI 布局初始化错误 PrimeFaces 6.2 的相关文章

随机推荐

  • 每个 google-maps api 密钥的引荐来源限制

    我们为超过 2500 家客户提供网站 CMS 解决方案 几乎所有网站都有谷歌地图模块 因此 自从谷歌改变了其地图使用政策以来 所有这些网站的地图模块日复一日地出现错误 我们需要想出一些快速 但肮脏 的解决方案 我们决定使用多个 api ke
  • pip Python 3 权限错误

    我在 Mac OS X 上使用 Python 3 一切都很完美 我曾经安装这样的软件包 pip install somePackage 但 IDLE 停止工作 所以我不得不重新安装它 之后 当我运行 pip 时 我得到了pip is not
  • numpy - ndarray - 如何删除基于另一个数组的行

    我想从基于另一个数组的 ndarray 中删除行 例如 k 1 3 99 n 1 a 2 b 3 c 4 c 99 a 100 e 期望结果 out 2 b 4 c 100 e k 中包含值的行的第一列将被删除 您可以使用np in1d创建
  • Shiny:使用 selectizeInput 选择组

    我有这样的愿景 我有一个选择器 用户可以单击该组来选择该组中的所有项目 例如 请参见this 当您单击输入框 X2 或 X4 时 我希望用户能够单击 西部 以选择加利福尼亚州和华盛顿州 理想情况下 我希望用户能够选择多个区域 并且能够自定义
  • Javascript 返回 OR(||) 运算的字符串

    我无法理解这一点 以下是使用 OR 运算符的表达式 var subCond1 adj getData relationEnabled true adj getData unhideIfHidden adj getData hlFixed t
  • 如何使用 awk 打印出最后一个模式范围?

    我的文件是这样的 开始模式 第一场比赛 结束模式 其他文字 开始模式 第二场比赛 结束模式 其他文字 开始模式 这就是我 想要打印出来 结尾 图案 其他文字 如何使用 awk 打印出最后一场比赛 我只知道如何打印所有这些匹配项 取决于您是否
  • 奇怪的 UIButton 行为:这正常吗?

    我有一个简单的 UIButton 想要在用户触摸它时执行某些操作 但随后将手指移到按钮之外并不触摸屏幕 所以看来我需要监听 UIControlEventTouchUpOutside 事件 在我的视图控制器中 我这样做了 UIButton b
  • java静态类单例与泛型

    我正在尝试创建如下所示的单例 但我不断收到警告 如果可能的话 我不想抑制警告 有办法做到吗 现在 我不想考虑线程安全性 我只是想传递这个警告 public interface Storage
  • vbscript - 将 Internet Explorer 应用程序窗口置于前面

    我有一个脚本 我通过它创建一个 IE 窗口CreateObject InternetExplorer Application 问题是 每当我运行这个脚本时 它总是在我的机器上可能已经打开的其他脚本之后打开 我希望这个 IE 窗口在其他所有窗
  • 使用 Clipboard.js 时 data-clipboard-text 不起作用

    我有一个简单的结构要测试clipboard js但它不起作用 我在一个简单的文件中使用 因为它在项目中也不起作用
  • MySQL select unique 不起作用

    我有一个数据库 其中有 1 个表 其中包含以下行 id name date 1 Mike 2012 04 21 2 Mike 2012 04 25 3 Jack 2012 03 21 4 Jack 2012 02 12 我只想提取不同的值
  • CSS3 - 动画文本左/中/右对齐

    我有一行 未换行 全角 div 内的文本 是否可以为这个元素设置动画text alignment所以文本移动到给定的一侧 中心 我知道我可以测量宽度并使用relative absolute positioning 但我没有找到直接的解决方案
  • ReferenceError:Jdbc未定义,V8版本问题?

    我的代码已经每天运行 6 个月了 但现在似乎不再运行了 我知道 Google App Script Runtime 更新了 V8https developers google com apps script guides v8 runtim
  • 如何调试 exec() 问题?

    exec 命令在我的服务器上不起作用 它不执行任何操作 我已关闭安全模式 并验证所有控制台命令都正常工作 我已尝试使用绝对路径 我已经检查了应用程序的权限 我需要的所有应用程序都有执行权限 我不知道还能做什么 这是我尝试过的代码的概要 ec
  • 去饱和效果消除了对比度

    我对 javaFx 的 ColorAdjust 效果有一个非常具体的问题 我正在尝试在图像上应用灰度滤镜 我正在使用 ColorAdjust 效果并设置饱和度 这是我正在尝试做的事情的可重复示例 public class App exten
  • JavaScript 默认等待而不是手动等待

    Async await 确实很方便 但我想要与它们相反的行为 我希望函数能够屈服 除非我手动指定它们继续并行运行 而不是其他函数继续运行 除非我手动要求它们等待承诺 例如 这段代码会打印出1 3 2 function wait ms ret
  • 以相同的时间/间隔从视频创建多个缩略图

    我需要使用 ffmpeg 同时从视频创建多个缩略图 例如 12 例如 如果视频时长 60 秒 我需要每 5 秒提取一次屏幕截图 我使用以下命令在第 5 秒内获取帧 ffmpeg ss 5 i video webm frames v 1 s
  • 具有相同 ViewScoped bean 类的多个浏览器选项卡或窗口

    将 Payara Server 4 1 2 174 与 mojarra 2 2 15 结合使用 我有一个简单的命名 Bean 其范围为 javax faces view ViewScoped import java io Serializa
  • PowerShell 字符串匹配和管道字符

    我在 PowerShell 中匹配包含管道字符的字符串时遇到困难 在以下情况下 Match 不应该返回 true gt Debug x86 match Debug x128 True 我尝试转义匹配参数管道字符 但这不会改变意外结果 例如
  • UI 布局初始化错误 PrimeFaces 6.2

    下面的代码可以很好地工作PrimeFaces 6 0 and 6 1 但与6 2当我点击按钮时Validate我看到带有消息的对话框 UI Layout Initialization Error The center pane elemen