Loading a page with PrimeFaces Schedule on JSF using ajax and embedding it within another JSF page

Running the "Scheduler" component of Prime Faces as a normal "xhtml" page works perfectly fine. However, when attempting to load the "schedule.xhtml" page through AJAX into another "xhtml" page, unexpected behavior occurs:

  1. The "schedule.xhtml" page does not load the default events attached with its Java class (those events are sample ones).
  2. No events are fired like ("addEvent", "onEventSelect", "onDateSelect", "onEventMove", "onEventResize")

Configuration: - JSF 2.2 Mojarra 2.2.0 - Prime Faces 5.0

Main xhtml page below:

<!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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"> 

<h:head>
<h:outputStylesheet library="css" name="default.css" />
</h:head> 
    <body> 

<p:layout fullPage="true">
    <p:layoutUnit position="north" size="185" resizable="false" closable="false" collapsible="false">     
        <div align="center" id="header">
         <h:graphicImage url="images/layout/banner.png"></h:graphicImage>
        </div>
    </p:layoutUnit>

    <p:layoutUnit position="west" size="210" header="Booking System" resizable="true" closable="false" collapsible="true">
        <h:form>                
            <p:growl autoUpdate="false"/>
            <p:growl id="growl" life="2000" />

            <p:panelMenu style="width:200px">
                <p:separator />
                <p:submenu label="Navigations" ajax="false">

                     <p:menuitem ajax="false" value="Book Meeting" action="#{menuView.setMyPage}" icon="ui-icon-calendar" update=":formCenter:content">
                        <f:param name="page" value="scheduler" />
                     </p:menuitem>                                      
                 </p:submenu>
            </p:panelMenu>                                  
        </h:form>       
    </p:layoutUnit>

    <p:layoutUnit position="center">   
        <h:form id="formCenter">

        <p:outputPanel autoUpdate="false">
            <h:panelGroup id="content" layout="block"> 
                 <ui:include src="#{menuView.page}.xhtml" />
            </h:panelGroup>
        </p:outputPanel>                   
         </h:form> 
    </p:layoutUnit>  
</p:layout>

</body> 
</html>

The scheduler xhtml page is as follows:

<!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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"> 

<h:head>

<style type="text/css">
    .value {
        width: 1000px;
    }
</style>

</h:head> 
<body> 

<h:form>
    <p:growl id="messages" showDetail="true" />

    <h:panelGrid columnClasses="value">
        <h3 style="margin-top: 0">Editable Schedule</h3>
        <p:schedule id="schedule" value="#{scheduleView.eventModel}" widgetVar="myschedule" timeZone="GMT+2">

            <p:ajax event="dateSelect" listener="#{scheduleView.onDateSelect}" update="eventDetails" oncomplete="PF('eventDialog').show();" />
            <p:ajax event="eventSelect" listener="#{scheduleView.onEventSelect}" update="eventDetails" oncomplete="PF('eventDialog').show();" />
            <p:ajax event="eventMove" listener="#{scheduleView.onEventMove}" update="messages" />
            <p:ajax event="eventResize" listener="#{scheduleView.onEventResize}" update="messages" />

        </p:schedule>

        <h3>Locale Support ( Example: Turkish )</h3>
        <p:schedule id="scheduleLocale" value="#{scheduleView.eventModel}" locale="tr" />

        <h3>Lazy Schedule</h3>
        <p:schedule value="#{scheduleView.lazyEventModel}" />
    </h:panelGrid>

    <p:dialog widgetVar="eventDialog" header="Event Details" showEffect="clip" hideEffect="clip">
        <h:panelGrid id="eventDetails" columns="2">
            <h:outputLabel for="title" value="Title:" />
            <p:inputText id="title" value="#{scheduleView.event.title}" required="true" />

            <h:outputLabel for="from" value="From:" />
            <p:inputMask id="from" value="#{scheduleView.event.startDate}" mask="99/99/9999">
                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="GMT+2"/>
            </p:inputMask>

            <h:outputLabel for="to" value="To:" />
            <p:inputMask id="to" value="#{scheduleView.event.endDate}" mask="99/99/9999">
                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="GMT+2"/>
            </p:inputMask>

            <h:outputLabel for="allDay" value="All Day:" />
            <h:selectBooleanCheckbox id="allDay" value="#{scheduleView.event.allDay}" />

            <p:commandButton type="reset" value="Reset" />
            <p:commandButton id="addButton" value="Save" actionListener="#{scheduleView.addEvent}" oncomplete="PF('myschedule').update();PF('eventDialog').hide();" />
        </h:panelGrid>
    </p:dialog>    
</h:form>

<script type="text/javascript">
    PrimeFaces.locales['tr'] = {
        closeText: 'kapat',
        prevText: 'geri',
        nextText: 'ileri',
        currentText: 'bugün',
        monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
            'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
        monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz',
            'Tem','Ağu','Eyl','Eki','Kas','Ara'],
        dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
        dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
        dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
        weekHeader: 'Hf',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: '',
        month: 'Ay',
        week: 'Hafta',
        day: 'Gün',
        allDayText: 'Tüm Gün'
    };
</script>


</body> 
</html>

Any advice or suggestions would be greatly appreciated. Thank you.

Answer №1

Issue resolved successfully.

I managed to fix the issue in the "schedule.xhtml" file by replacing the h:head and body sections with the "<ui:composition>" tag as illustrated below:

         <ui:composition xmlns="http://www.w3.org/1999/xhtml"
                        xmlns:h="http://java.sun.com/jsf/html"
                        xmlns:f="http://java.sun.com/jsf/core"
                        xmlns:p="http://primefaces.org/ui"
                        xmlns:ui="http://java.sun.com/jsf/facelets">

   <h:form>
    <p:growl id="messages" showDetail="true" />

    <h:panelGrid columnClasses="value">
        <h3 style="margin-top: 0">Editable Schedule</h3>
        <p:schedule id="schedule" value="#{scheduleView.eventModel}" widgetVar="myschedule" timeZone="GMT+2">

            <p:ajax event="dateSelect" listener="#{scheduleView.onDateSelect}" update="eventDetails" oncomplete="PF('eventDialog').show();" />s;
            <p:ajax event="eventSelect" listener="#{scheduleView.onEventSelect}" update="eventDetails" oncomplete="PF('eventDialog').show();" />
            <p:ajax event="eventMove" listener="#{scheduleView.onEventMove}" update="messages" />
            <p:ajax event="eventResize" listener="#{scheduleView.onEventResize}" update="messages" />

        </p:schedule>

        <h3>Locale Support ( Example: Turkish )</h3>
        <p:schedule id="scheduleLocale" value="#{scheduleView.eventModel}" locale="tr" />

        <h3>Lazy Schedule</h3>
        <p:schedule value="#{scheduleView.lazyEventModel}" />
    </h:panelGrid>

    <p:dialog widgetVar="eventDialog" header="Event Details" showEffect="clip" hideEffect="clip">
        <h:panelGrid id="eventDetails" columns="2">
            <h:outputLabel for="title" value="Title:" />
            <p:inputText id="title" value="#{scheduleView.event.title}" required="true" />

            <h:outputLabel for="from" value="From:" />
            <p:inputMask id="from" value="#{scheduleView.event.startDate}" mask="99/99/9999">
                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="GMT+2"/>
            </p:inputMask>

            <h:outputLabel for="to" value="To:" />
            <p:inputMask id="to" value="#{scheduleView.event.endDate}" mask="99/99/9999">
                <f:convertDateTime pattern="dd/MM/yyyy" timeZone="GMT+2"/>
            </p:inputMask>

            <h:outputLabel for="allDay" value="All Day:" />
            <h:selectBooleanCheckbox id="allDay" value="#{scheduleView.event.allDay}" />

            <p:commandButton type="reset" value="Reset" />
            <p:commandButton id="addButton" value="Save" actionListener="#{scheduleView.addEvent}" oncomplete="PF('myschedule').update();PF('eventDialog').hide();" />
        </h:panelGrid>
    </p:dialog>    
</h:form>


    </ui:composition>

The problem has been successfully resolved, and the page is now loading as expected with all events functioning properly.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Personalized Vue component

Within my single page application, I utilize a v-card containing a v-card-title. The content within the v-card-text consists of various components/text as well as a close button that requires complex logic and properties. I am interested in creating a cu ...

Storing data from a div into a fresh file using jQuery AJAX and PHP

I am facing an issue while attempting to save the contents of a div to a new HTML file. My approach involves using jQuery AJAX to send data to a PHP script, but currently, the PHP code is generating an empty file. Below is the structure of the HTML: < ...

Creating a connection between a class Bill and a class SimplifiedBill: Best practices

As stated in the title, I am faced with a situation where I have two classes: SimplifiedBill, which includes only date and finalPayment, and Bill, which has the same properties as SimplifiedBill but also additional details such as taxes, user data, and ser ...

Comparing NextJs hydration with using the client-side approach

Currently exploring the ins and outs of NextJs to grasp its fundamental features. It is my understanding that by default, NextJs components operate on the server-side and utilize Hydration to enable interactivity shortly after displaying pre-rendered HTML ...

What is the process for switching directories and renaming a file when uploading in nodeJs?

I am currently using multer and fs to handle the upload of an image file. How can I modify the directory where uploaded files are stored? Currently, all files are saved in my "routes" folder instead of the "uploads" folder created by multer. Additionally, ...

Discovering the Browser Refresh and Close Events in Angular JS: A Comprehensive Guide

Hello, I've attempted using the event below to detect something, but occasionally it doesn't trigger when closing the tab or browser. $window.addEventListener('beforeunload', function(event) { // Your code here }); ...

Ways to retrieve a specific String key from an array of objects in JavaScript

Consider the following array: snacksArray = [{'cookies':'delicious'},{'brownies':'scrumptious'}] If I were to retrieve snacksArray[0], I would get {'cookies':'delicious'}. Now, let's say I ...

the ad grid fails to load properly on the page

In the midst of developing my angular 4 project, which is based on a starter template found here, I encountered an issue while trying to integrate ag-grid into my project. Following the instructions provided here, I successfully created a new example proj ...

Tips for storing user input in an array

I have a question about adding data to an array from a table of input boxes. Here's the code I've been working on to achieve this: Click here to view the code Whenever I click the add button, I want the data to be stored in the variable named ...

How can I extract and print only the desired div content and send it via email from an HTML/JS page?

Is there a way to print only specific content within a div, rather than the entire webpage in JS/HTML? Below is the code snippet I am using: function displayRadioValue() { let section1 = document.querySelectorAll('.section-1 > input[type="ra ...

Creating an Event Listener for a Published Angular Elements Web Component

Note: The Web Component mentioned here is exported from Angular using Angular Elements and differs from traditional Angular components Experimenting with Angular Elements led to the creation of an NgFor component that loads the JSON file provided below. ...

Prevent unauthorized access to ng-href by implementing validation measures in AngularJS

I have been struggling to find a solution for my AngularJS issue. As a newcomer to AngularJS, I am not yet familiar with all of its functionalities. I have a multi-part form that is submitted at the end using ng-href and HTTP GET. The code snippet for subm ...

Exploring Three.js: Meshing in Both 2D and 3D

Can Canvas2D be utilized for rendering graphics in the scene? Specifically, can shapes and/or meshes be drawn independently of the camera's position, rotation, and zoom? Our application requires some drawing functionality (not related to GUI elements, ...

"Encountering a 404 error with the angular2-in-memory-web-api

Currently, I am in the process of developing a 5 minute application using Angular 2 with reference to this particular guide: https://angular.io/docs/ts/latest/tutorial/toh-pt6.html. While working on the HTTP section, I encountered a 404 error due to the a ...

The error event in events.js on line 72 was not properly handled, causing an exception to be thrown

When attempting to utilize the node-ar-drone package to control an AR Parrot Drone 2 and interface with it, I encounter errors after connecting to the drone's wireless network on my OSX Yosemite: 587214779:examples mona$ node png-stream.js Connectin ...

What are the steps to resolve the DOMException error "Failed to execute 'open' on 'XMLHttpRequest': Invalid URL" in Angular HttpClient when making requests to a third-party server or API?

I am encountering the following issue: DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL while trying to perform a GET request to debounce.com import{HttpClient} from '@angular/common/http'; export {T ...

Guide on sending MySQL query results as JSON data using Ajax

I'm having trouble figuring out how to pass the results of a MySQL query into an HTML page using AJAX and JSON. I have the following code in ajax2.php: $statement = $pdo->prepare("SELECT * FROM posts WHERE subid IN (:key2) AND Poscode=:postcode2") ...

Transferring data from jQuery Ajax to PHP

I'm facing a challenge in retrieving a value back to PHP that I can manipulate and save to the database. It appears that using the GET method with jQuery AJAX is not yielding the desired results. Below is the PHP code snippet where I attempt to captur ...

When the regex.test function is not functioning correctly in a Vue.js JavaScript router, issues may arise

const router = createRouter({ history: createWebHistory(), routes, }); // ... const allowedToAnonymous = [ /^\/login$/g, /^\/signup$/g, /^\/home$/g, /^\/emailconfirm\/[0-9a-zA-Z]{8}$/g, /^\/serviceGuide$/g, / ...

Transitioning from utilizing Stripe Checkout to implementing Stripe Elements

After using Stripe Checkout for a while, I've decided to make the switch to Stripe Elements. You can find more information about Stripe Elements here. When sending the name and address fields as tokenData, I follow this format: let tokenData = { ...