Results 1 to 2 of 2

Thread: Custom viewScope and jsf

  1. #1
    Join Date
    Nov 2007
    Posts
    177

    Default Custom viewScope and jsf

    Hello,

    I am trying to get a viewScoped spring bean to work with jsf and richfaces.

    Here is how I implemented the viewScope:

    Code:
    package com.jeanbaptistemartin.util;
    
    import java.util.Map;
    
    import javax.faces.context.FacesContext;
    
    import org.springframework.beans.factory.ObjectFactory;
    
    import org.springframework.beans.factory.config.Scope;
    
     
    
    /**
    
    * Implements the JSF View Scope for use by Spring. This class is registered as a Spring bean with the CustomScopeConfigurer.
    
    */
    
    public class ViewScope implements Scope {
    
     
    
        @Override
    
        public Object get(String name, ObjectFactory<?> objectFactory) {
    
            if (FacesContext.getCurrentInstance().getViewRoot() != null) {
    
                Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();
    
                if (viewMap.containsKey(name)) {
    
                    return viewMap.get(name);
    
                } else {
    
                    Object object = objectFactory.getObject();
    
                    viewMap.put(name, object);
    
                    return object;
    
                }
    
            } else {
    
                return null;
    
            }
    
        }
    
     
    
        @Override
    
        public Object remove(String name) {
    
            if (FacesContext.getCurrentInstance().getViewRoot() != null) {
    
                return FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(name);
    
            } else {
    
                return null;
    
            }
    
        }
    
     
    
        @Override
    
        public void registerDestructionCallback(String name, Runnable callback) {
    
            // Do nothing
    
        }
    
     
    
        @Override
    
        public Object resolveContextualObject(String key) {
    
            return null;
    
        }
    
     
    
        @Override
    
        public String getConversationId() {
    
            return null;
    
        }
    
    }
    Here is my jsf page:

    
    Code:
    <!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:f="http://java.sun.com/jsf/core"
    
          xmlns:pretty="http://ocpsoft.com/prettyfaces"
    
          xmlns:a4j="http://richfaces.org/a4j"
    
          xmlns:rich="http://richfaces.org/rich"
    
          xmlns:jbm="http://www.jeanbaptistemartin.com/facelets/functions">
    
        <body>
    
            <ui:composition template="WEB-INF/include/template.xhtml">
    
                <ui:define name="title-bar-title">
    
                    <title lang="#{view.locale.language}">
    
                        <h:outputText value="#{msg['menu.galerie']}"/>
    
                        <h:outputText value=" #{msg['titre.separateur']} " />
    
                        <h:outputText value="#{msg['artiste.titre']}" />
    
                    </title>
    
                </ui:define>
    
                <ui:define name="meta-description">
    
                    <meta name="description" content="#{msg['meta.description.galerie']}" lang="#{view.locale.language}"/>
    
                </ui:define>
    
                <ui:define name="javascript">
    
                    <script language="javascript" type="text/javascript"  src="#{facesContext.externalContext.requestContextPath}/js/jquery.formulaire-inscription.js"/><!-- todo: relocate -->
    
                </ui:define>
    
     
    
                <ui:define name="locale-component">
    
                    <pretty:link mappingId="galerieAction" hreflang="fr" lang="fr">
    
                        <f:param value="fr" />
    
                        <h:outputText value="#{msg['langue.francais.libelle']}" />
    
                    </pretty:link>
    
                    <h:outputText value=" #{msg['langue.separateur']} "/>
    
                    <pretty:link mappingId="galerieAction" hreflang="en" lang="en">
    
                        <f:param value="en" />
    
                        <h:outputText value="#{msg['langue.anglais.libelle']}" />
    
                    </pretty:link>
    
                </ui:define>
    
     
    
                <ui:define name="menu">
    
                    <ui:include src="WEB-INF/include/menu.xhtml">
    
                        <ui:param name="page" value="galerie"/>
    
                    </ui:include>
    
     
    
                </ui:define>
    
     
    
                <ui:define name="title">
    
                    <ul>
    
                        <li><strong><pretty:link mappingId="rootAction"><f:param value="#{view.locale.language}"/><h:outputText value="#{msg['menu.accueil']}" /></pretty:link></strong></li>
    
                        <li><strong><h:outputText value="#{msg['menu.galerie']}"/></strong></li>
    
                    </ul>
    
                </ui:define>
    
     
    
                <ui:define name="body">
    
                    <a4j:outputPanel layout="block" styleClass="wrapper">
    
                        <rich:dataGrid value="#{galerieView.sculptures}" var="sculpture" columns="3" styleClass="datagrid-galerie" iterationStatusVar="iterations">
    
                            <h:panelGroup rendered="#{!iterations.last}">
    
                                <p>
    
                                    <pretty:link mappingId="sculptureAction" styleClass="miniature-link">
    
                                        <f:param value="#{view.locale.language}"/>
    
                                        <f:param value="#{jbm:normaliserURL(sculpture.sculpturei18nMap[view.locale.language].titre)}" />
    
                                        <f:param value="#{sculpture.sculptureID}" />
    
                                        <h:graphicImage value="#{initParam['com.jeanbaptistemartin.static.url']}/#{sculpture.photoMiniature}" styleClass="miniature-image" alt="#{sculpture.sculpturei18nMap[view.locale.language].titre}, #{sculpture.sculpturei18nMap[view.locale.language].matiere}, #{jbm:renvoyerAnnee(sculpture.annee)}."/>
    
                                    </pretty:link>
    
                                </p>
    
                                <p>
    
                                    <pretty:link mappingId="sculptureAction" styleClass="miniature-link-text">
    
                                        <f:param value="#{view.locale.language}"/>
    
                                        <f:param value="#{jbm:normaliserURL(sculpture.sculpturei18nMap[view.locale.language].titre)}" />
    
                                        <f:param value="#{sculpture.sculptureID}" />
    
                                        <h:outputText value="#{sculpture.sculpturei18nMap[view.locale.language].titre}, " />
    
                                        <h:outputText value="#{sculpture.sculpturei18nMap[view.locale.language].matiere}" />
    
                                    </pretty:link>
    
                                </p>
    
                            </h:panelGroup>
    
                            <h:panelGroup rendered="#{iterations.last}" styleClass="miniature-link">
    
                                <p id="sellette">
    
                                    <img src="#{facesContext.externalContext.requestContextPath}/images/200x200.gif" class="miniature-image" alt="" onclick="slideUp()"/>
    
                                </p>
    
                                <div class="formulaireInscriptionSculpture">
    
                                    <h:form id="formulaireInscriptionSculpture" prependId="false">
    
                                        <ui:include src="WEB-INF/include/formulaire-inscription-sculpture.xhtml"/><!-- todo: ne fonctionne pas... -->
    
                                    </h:form>
    
                                </div>
    
                            </h:panelGroup>
    
                            <rich:jQuery name="slideUp" query="slideUp({duration:'slow'});slideDownForm()" selector="#sellette"/>
    
                            <rich:jQuery name="slideDownForm" query="slideDown({duration:'slow'})" selector="div.formulaireInscriptionSculpture" />
    
                            <rich:jQuery name="slideDownSellette" query="slideDown({duration:'slow'})" selector="#sellette"/>
    
                        </rich:dataGrid>
    
                    </a4j:outputPanel>
    
                </ui:define>
    
            </ui:composition>
    
        </body>
    
    </html>

    The problem I have is that now that I have switched to viewScope, my page is empty i.e. this: #{galerieView.sculptures} is empty.

    Can anyone please help?

    Thanks in advance,

    J.

  2. #2
    Join Date
    Nov 2007
    Posts
    177

    Default up

    Can anyone please help?
    J.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •