Partial Update (AJAX)

Demonstration and test of partial reload
  • Click on 'Reload Left' button to reload the left panel."
  • Click on 'Reload Right' button to reload the right panel."
  • Or select a option from the selectOneChoise control:"
    • Select 'Reload parent' to reload both panels parent container"
    • Select 'Reload both' to reload both panels in one request"
    • Select 'Goto prev' to navigate to previous page"
    • Select 'Goto next' to navigate to next page"
<?xml version="1.0" encoding="UTF-8"?> <!-- * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. --> <ui:composition template="/main.xhtml" xmlns:tc="http://myfaces.apache.org/tobago/component" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns="http://www.w3.org/1999/xhtml"> <ui:param name="title" value="Partial Update (AJAX)"/> <tc:panel id="parent"> <tc:out value="Demonstration and test of partial reload"/> <tc:style file="content/50-partial/partial.css"/> <tc:gridLayout columns="1fr 1fr"> <tc:box label="Left panel" id="left"> <tc:gridLayout rows="auto 1fr"> <tc:label value="Current seconds on server: "/> <tc:out value="#{partialReloadController.currentDate}" markup="demoSeconds"> <f:convertDateTime pattern="ss:SSS"/> </tc:out> </tc:gridLayout> </tc:box> <tc:box label="Right panel" id="right"> <tc:gridLayout rows="auto 1fr"> <tc:label value="Current seconds on server: "/> <tc:out value="#{partialReloadController.currentDate}" markup="demoSeconds"> <f:convertDateTime pattern="ss:SSS"/> </tc:out> </tc:gridLayout> </tc:box> </tc:gridLayout> <tc:flowLayout> <ul> <li>Click on 'Reload Left' button to reload the left panel."</li> <li>Click on 'Reload Right' button to reload the right panel."</li> <li>Or select a option from the selectOneChoise control:" <ul> <li>Select 'Reload parent' to reload both panels parent container"</li> <li>Select 'Reload both' to reload both panels in one request"</li> <li>Select 'Goto prev' to navigate to previous page"</li> <li>Select 'Goto next' to navigate to next page"</li> </ul> </li> </ul> </tc:flowLayout> <tc:gridLayout columns="1fr 300px 1fr"> <tc:panel/> <tc:gridLayout columns="1fr 1fr"> <tc:button label="Reload left" tip="Reload left side box" action="#{partialReloadController.reload}"> <f:ajax render="left :page:header:headerInfo"/> </tc:button> <tc:button label="Reload right" tip="Reload right side box" action="#{partialReloadController.reload}"> <f:ajax render="right :page:header:headerInfo"/> </tc:button> <tc:button label="Reload both" tip="Reload both boxes" action="#{partialReloadController.reload}"> <f:ajax render="left right :page:header:headerInfo"/> <tc:span column="2"/> </tc:button> <tc:button label="Reload full panel" tip="Reload the full area inside the outer box" action="#{partialReloadController.reload}"> <f:ajax render="parent :page:header:headerInfo"/> <tc:span column="2"/> </tc:button> <tc:button label="Reload both (wait 3 s)" tip="Reload both boxes, but the server has a delay of 3 seconds" action="#{partialReloadController.waitAndReload3}"> <f:ajax render="left right :page:header:headerInfo"/> <tc:span column="2"/> </tc:button> <tc:button label="Reload both (wait 7 s, timeout)" tip="Reload both boxes, but the server has a delay of 7 seconds, this is more than the default timeout for AJAX" action="#{partialReloadController.waitAndReload7}"> <f:ajax render="left right :page:header:headerInfo"/> <tc:span column="2"/> </tc:button> <tc:panel id="navTest"> <tc:span column="2"/> <tc:selectOneChoice fieldId="navSelect" value="#{partialReloadController.navigateActionValue}" label="On Change"> <f:ajax execute="navTest" render="navTest :page:header:headerInfo" listener="#{partialReloadController.navigateAction}"/> <f:selectItem itemLabel="Select action" itemValue=""/> <f:selectItem itemLabel="Reload left" itemValue="left"/> <f:selectItem itemLabel="Reload right" itemValue="right"/> <f:selectItem itemLabel="Reload both" itemValue="both"/> <f:selectItem itemLabel="Reload parent" itemValue="parent"/> <f:selectItem itemLabel="Goto prev" itemValue="prev"/> <f:selectItem itemLabel="Goto next" itemValue="next"/> </tc:selectOneChoice> </tc:panel> <tc:button label="Error left" tip="Reload left side box, but an exception occures" action="#{partialReloadController.error}"> <f:ajax render="left :page:header:headerInfo"/> </tc:button> <tc:button label="Error right" tip="Reload right side box, but an exception occures" action="#{partialReloadController.error}"> <f:ajax render="right :page:header:headerInfo"/> </tc:button> </tc:gridLayout> <tc:panel/> </tc:gridLayout> </tc:panel> </ui:composition>