cancel
Showing results for 
Search instead for 
Did you mean: 

need help in tutorial Getting_Started_with_WCM_for_Alfresco

shikha
Champ in-the-making
Champ in-the-making
i have gone through this tutorial and try to modify it according to my needs.
i m facing problem when i try to modify PressReleaseBean.java file.
i have added more elements to the existing press-release.xsd file and accordingly modify the java class, so that more information will be displayed on related index.jsp, but when i view the page i got the error Unable to find a value for "Authors" in object of class "org.alfresco.web.pr.PressReleaseBean" using operator "."

i don't modify the pr.tld file

can body help where i go wrong or where may i forgot something
thankx in advance
2 REPLIES 2

shikha
Champ in-the-making
Champ in-the-making
using the files i mentioned below, html form generated correctly but the index.jsp page which use PressReleaseBean.class is showing error.
i need to mention more information on the index.jsp page for all press releases.
PressReleaseBean.java is complied successfully.

can body help where i go wrong???

the files modified by me are:

press-release.xsd is:

<?xml version="1.0"?>
<!–
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.

* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.

* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception.  You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"

Describes a book release of journal and related assets.
–>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlnsSmiley Tonguer="http://www.alfresco.org/alfresco/pr"
           targetNamespace="http://www.alfresco.org/alfresco/pr"
           elementFormDefault="qualified">

  <!– dynamically loads the company footer choices simple type –>
  <xs:include schemaLocation="/media/releases/get_company_footer_choices_simple_type.jsp"/>

  <xs:simpleType name="category">
    <xs:restriction base="xs:normalizedString">
      <xs:enumeration value="Books"/>
      <xs:enumeration value="Journals"/>
      <xs:enumeration value="Newsletters"/>
      <xs:enumeration value="Magazines"/>
      <xs:enumeration value="Others"/>
    </xs:restriction>
  </xs:simpleType>
<xs:simpleType name="BLanguage">
    <xs:restriction base="xs:normalizedString">
      <xs:enumeration value="English"/>
      <xs:enumeration value="Hindi"/>
    </xs:restriction>
  </xs:simpleType>
<xs:simpleType name="BType">
    <xs:restriction base="xs:normalizedString">
      <xs:enumeration value="HandBook"/>
      <xs:enumeration value="PaperBack"/>
    </xs:restriction>
  </xs:simpleType>


  <!– defines the form for creating a journal release –>
  <xs:element name="press_release">
    <xs:complexType>
      <xs:sequence>
         <xs:element name="title" type="xs:normalizedString"/>
           <xs:element name="Authors" type="xs:normalizedString"/>
      <xs:element name="Language" type="pr:BLanguage" default="Hindi"/>
      <xs:element name="Price" type="xs:normalizedString"/>
      <xs:element name="Pages" type="xs:normalizedString"/>
      <xs:element name="BookType" type="pr:BType" default="HandBook"/>
      <xs:element name="ISBNno" type="xs:normalizedString"/>
      <xs:element name="YearOfPublication" type="xs:normalizedString"/>
<xs:element name="Publisher" type="xs:normalizedString"/>
        <xs:element name="abstract" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
           <xs:element name="UploadFiles" minOccurs="0"
               maxOccurs="1">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element name="TOC " type="xs:anyURI" minOccurs="0" maxOccurs="1"/>   
<xs:element name="CoverPage" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>   
<xs:element name="BackPage" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>   
                  </xs:sequence>
               </xs:complexType>
            </xs:element>   
   <xs:element name="keywords" type="xs:normalizedString" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element name="category" type="pr:category" default="Books"/>
   <xs:element name="launch_date" type="xs:date"/>
   <xs:element name="expiration_date" type="xs:date"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

press-release.xsl is:
<?xml version="1.0" encoding="UTF-8"?>
<!–
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.

* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.

* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception.  You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"


Produces an html rendition of a press release
–>
<xsl:stylesheet version="1.0"
      xmlns:xhtml="http://www.w3.org/1999/xhtml"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlnsSmiley Tonguer="http://www.alfresco.org/alfresco/pr"
      xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
      exclude-result-prefixes="xhtml">
  <xslSmiley Surprisedutput method="html"  encoding="UTF-8" indent="yes"
              doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
              doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'/>

  <xslSmiley Tonguereserve-space elements="*"/>

  <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
   <!– include common navigation components using SSIs (see web.xml for more information) –>
   <xsl:comment>#include virtual="/assets/include_in_head.html"</xsl:comment>
   <title><xsl:value-of select="/prSmiley Tongueress_release/pr:title"/></title>
   <meta name="description" lang="en" >
     <xsl:attribute name="content"><xsl:value-of select="/prSmiley Tongueress_release/pr:title"/></xsl:attribute>
        </meta>
   <style type="text/css">
     p.leader {
     font-weight: 700;
     }
   </style>
      </head>
      <body>
        <div id="container">
     <xsl:comment>#include virtual="/assets/include_main_navigation.html"</xsl:comment>
     <xsl:comment>#include virtual="/about/navigation.html"</xsl:comment>
     <div id="content">&#160;</div>
     <!– Main Content –>
     <div id="main_content">

       <!– BEGIN MAIN CONTENT –>
       <h1><xsl:value-of select="/prSmiley Tongueress_release/pr:title"/></h1> 
      <p>
   <table border="0"><tr><td>
      <strong>Authors: </strong><xsl:value-of select="/prSmiley Tongueress_release/pr:Authors"/>
       <p><strong>Language: </strong><xsl:value-of select="/prSmiley Tongueress_release/pr:BLanguage"/>
       </p><p><strong>Price: </strong><xsl:value-of select="/prSmiley Tongueress_release/prSmiley Tonguerice"/>
       </p><p><strong>Pages: </strong><xsl:value-of select="/prSmiley Tongueress_release/prSmiley Tongueages"/>
       </p><p><strong>Type: </strong><xsl:value-of select="/prSmiley Tongueress_release/pr:BType"/>
       </p><p><strong>ISBN no: </strong><xsl:value-of select="/prSmiley Tongueress_release/pr:ISBN"/>
       </p><p><strong>Year of Publication: </strong><xsl:value-of select="/prSmiley Tongueress_release/pr:YearOfPublication"/>
    </p><p><strong>Publisher: </strong><xsl:value-of select="/prSmiley Tongueress_release/prSmiley Tongueublisher"/>
</p></td>
<td><p>Cover Page</p>
<xsl:element name="img">
         <xsl:attribute name="src">
      <xsl:value-of select="/prSmiley Tongueress_release/pr:UploadFiles/pr:CoverPage"/>
         </xsl:attribute>
        <xsl:attribute name="align">                               <xsl:text>left</xsl:text>
        </xsl:attribute>
       </xsl:element>
</td>
<td><p>
Back Page</p>
<xsl:element name="img">
         <xsl:attribute name="src">
      <xsl:value-of select="/prSmiley Tongueress_release/pr:UploadFiles/pr:BackPage"/>
         </xsl:attribute>
        <xsl:attribute name="align">                               <xsl:text>left</xsl:text>
        </xsl:attribute>
       </xsl:element>
</td>
</tr>
</table></p>
<p><strong>Abstract: </strong><xsl:value-of select="/prSmiley Tongueress_release/pr:abstract"/></p>
<p>
<xsl:element name="a">
         <xsl:attribute name="href">
      <xsl:value-of select="/prSmiley Tongueress_release/pr:UploadFiles/pr:TOC"/>
         </xsl:attribute>
         <xsl:text>view Table of Content</xsl:text>
       </xsl:element>
</p>
       <p></p>
    
     </div>
     <!– Feature Content –>
     <div id="right_content">
       <div class="box_blue">
         <h2>ICAR Publications</h2>

         <!– store the current category in a variable for later comparison –>
         <xsl:variable name="my_category"
             select="/prSmiley Tongueress_release/pr:category"/>
         <!– store the current title in a variable for later comparison –>
         <xsl:variable name="my_title"
             select="/prSmiley Tongueress_release/pr:title"/>
         <!– load all press releases into a variable by calling into a form data function –>
         <xsl:variable name="all_press_release"
             select="alfSmiley TonguearseXMLDocuments('press_release')"/>
         <ul>
      <!– select a unique set of categories for the first level navigation –>
      <xsl:for-each select="$all_press_release[not(pr:category=preceding-sibling:Smiley TonguerSmiley Tongueress_release/pr:category)]">
        <xsl:sort select="pr:category"/>
        <li>
          <xsl:choose>
            <!– for the current category, present all press releases in this category –>
            <xsl:when test="pr:category=$my_category">
         <b><xsl:value-of select="pr:category"/></b>
         <ul>
           <!– iterate all press releases which are in my_category –>
           <xsl:for-each select="$all_press_release[pr:category=$my_category]">
             <xsl:sort select="pr:title"/>
             <li>
               <xsl:element name="a">
            <xsl:if test="$my_title=pr:title">
              <xsl:attribute name="style">font-weight:bold;</xsl:attribute>
            </xsl:if>
            <xsl:attribute name="href">
              <xsl:value-of select="fn:replaceAll(string(@alf:file_name), '.xml', '.html')"/>
            </xsl:attribute>
            <xsl:value-of select="pr:title"/>
               </xsl:element>
             </li>
           </xsl:for-each>
         </ul>
            </xsl:when>
            <xslSmiley Surprisedtherwise>
         <!–
         for other categories present a link to the first document in that category
         with the category label
         –>
         <xsl:element name="a">
           <xsl:attribute name="href">
             <xsl:value-of select="fn:replaceAll(string(@alf:file_name), '.xml', '.html')"/>
           </xsl:attribute>
           <xsl:value-of select="pr:category"/>
         </xsl:element>
            </xslSmiley Surprisedtherwise>
          </xsl:choose>
        </li>
      </xsl:for-each>
         </ul>
       </div>
     </div>
     <div id="clear">&#160;</div>
   </div>
   <!–All Three End –>
   <xsl:comment>#include virtual="/assets/footer.html"</xsl:comment>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

PressReleaseBean.java is:

package org.alfresco.web.pr;

import java.util.*;
import java.text.*;
import javax.servlet.jsp.PageContext;
import org.w3c.dom.*;
import org.alfresco.web.forms.*;

/**
* Bean for getting data for press releases.
* It's used by /media/releases/index.jsp to aggregate all forms created by press-release.xsd in
* /media/releases/content and generate an index page for them.
*/
public class PressReleaseBean
{
   /**
    * Loads all xml assets created by press-release.xsd in /media/releases/content and populates
    * PressReleaseBeans with their contents.
    *
    * @param pageContext the page context from the jsp, needed for accessing the
    * servlet context for the ServletContextFormDataFunctionsAdapter class.
    *
    * @return a list of populated PressReleaseBeans.
    */
   public static List<PressReleaseBean> getPressReleases(final PageContext pageContext)
      throws Exception
   {
      final FormDataFunctions ef =
         new ServletContextFormDataFunctionsAdapter(pageContext.getServletContext());

      final Map<String, Document> entries =
         ef.parseXMLDocuments("press-release", "/media/releases/content");
      final List<PressReleaseBean> result = new ArrayList<PressReleaseBean>(entries.size());
      for (Map.Entry<String, Document> entry : entries.entrySet())
      {
         result.add(PressReleaseBean.loadPressRelease(entry.getValue(), entry.getKey()));
      }
      return result;
   }

   /**
    * Provides a list of press releases for a specified category.
    *
    * @param pageContext the page context from the jsp
    * @param category the category to search for
    *
    * @return all press releases within the specified category.
    */
   public static List<PressReleaseBean> getPressReleasesInCategory(final PageContext pageContext,
                                                                   final String category)
      throws Exception
   {
      final FormDataFunctions ef =
         new ServletContextFormDataFunctionsAdapter(pageContext.getServletContext());

      final Map<String, Document> entries =
         ef.parseXMLDocuments("press-release", "/media/releases/content");
      final List<PressReleaseBean> result = new ArrayList<PressReleaseBean>(entries.size());
      for (Map.Entry<String, Document> entry : entries.entrySet())
      {
         final Document d = entry.getValue();
         final Element cEl = (Element)
            d.getElementsByTagName("pr:category").item(0);
        
         if (category.equals(cEl.getFirstChild().getNodeValue()))
         {
            result.add(PressReleaseBean.loadPressRelease(d, entry.getKey()));
         }

      }
      return result;
   }

   /**
    * Returns a set of unique categories used by the press releases in sorted order.
    *
    * @param pageContext the page context variable from the jsp
    *
    * @return a set of unique categories used by the press releases in sorted order.
    */
   public static Set<String> getPressReleaseCategories(final PageContext pageContext)
      throws Exception
   {
      final FormDataFunctions ef =
         new ServletContextFormDataFunctionsAdapter(pageContext.getServletContext());

      final TreeSet<String> result = new TreeSet<String>();
      final Map<String, Document> entries =
         ef.parseXMLDocuments("press-release", "/media/releases/content");
      for (Map.Entry<String, Document> entry : entries.entrySet())
      {
         final Element cEl = (Element)
            entry.getValue().getElementsByTagName("pr:category").item(0);
       
      }
      return result;
   }

   /**
    * Utility function to create an instance of a press release using
    * form instance data.
    *
    * @param d the xml document
    * @param fileName the filename of the file from which the document was loaded.
    *
    * @return a press release representing the content of the file.
    */
   private static PressReleaseBean loadPressRelease(final Document d,
                                                    final String fileName)
      throws Exception
   {
      final Element t = (Element)d.getElementsByTagName("pr:title").item(0);
      final Element a = (Element)d.getElementsByTagName("pr:Authors").item(0);
      final Element dateEl = (Element)d.getElementsByTagName("pr:launch_date").item(0);
      final Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateEl.getFirstChild().getNodeValue());
final Element p = (Element)d.getElementsByTagName("prSmiley Tonguerice").item(0);
final Element y = (Element)d.getElementsByTagName("pr:YearOfPublication").item(0);


      String href = "/media/releases/content/" + fileName;
      href = href.replaceAll(".xml$", ".html");
      return new PressReleaseBean(t.getFirstChild().getNodeValue(),
                                  a.getFirstChild().getNodeValue(),
                                  date,
                                  href,p.getFirstChild().getNodeValue(),y.getFirstChild().getNodeValue());
   }

   private final String title;
   private final String Authors;//it is used for authors name
   private final Date launchDate;
   private final String href;// for more details link
private final String Price;
private final String YearOfPublication;




   public PressReleaseBean(final String title,
                           final String Authors,
                           final Date launchDate,
                           final String href,final String Price,final String YearOfPublication)
   {
      this.title = title;
      this.Authors = Authors;
      this.launchDate = launchDate;
      this.href = href;
this.Price = Price;
this.YearOfPublication= YearOfPublication;


   }

   /**
    * The title of the press release as defined in the xml asset.
    */
   public String getTitle()
   {
      return this.title;
   }

   /**
    * The abstract of the press release as defined in the xml asset.
    */
   public String getAuthors()
   {
      return this.Authors;
   }

   /**
    * The launch date of the press release as defined in the xml asset.
    */
   public Date getLaunchDate()
   {
      return this.launchDate;
   }

   /**
    * Returns the url within the webapp to the xml file describing this press release
    *
    * @return the url to the xml file which will be something like /media/releases/content/[filename].xml
    */
   public String getHref()
   {
      return this.href;
   }
public String getPrice()
   {
      return this.Price;
   }
public String getYearOfPublication()
   {
      return this.YearOfPublication;
   }
}

pr.tld is:   this file is not modifed
<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
        version="2.0">

    <tlib-version>1.0</tlib-version>
    <short-name>pr</short-name>
    <uri>http://www.alfresco.org/alfresco/pr</uri>
    <function>
      <name>getPressReleases</name>
      <function-class>org.alfresco.web.pr.PressReleaseBean</function-class>
      <function-signature>java.util.List getPressReleases(javax.servlet.jsp.PageContext)</function-signature>
    </function>
    <function>
      <name>getPressReleasesInCategory</name>
      <function-class>org.alfresco.web.pr.PressReleaseBean</function-class>
      <function-signature>java.util.List getPressReleasesInCategory(javax.servlet.jsp.PageContext, java.lang.String)</function-signature>
    </function>
    <function>
      <name>getPressReleaseCategories</name>
      <function-class>org.alfresco.web.pr.PressReleaseBean</function-class>
      <function-signature>java.util.Set getPressReleaseCategories(javax.servlet.jsp.PageContext)</function-signature>
    </function>
    <function>
      <name>getCompanyFooterChoices</name>
      <function-class>org.alfresco.web.pr.CompanyFooterBean</function-class>
      <function-signature>java.util.List getCompanyFooterChoices(javax.servlet.jsp.PageContext)</function-signature>
    </function>
</taglib>

zaizi
Champ in-the-making
Champ in-the-making
Try "authors".

Ainga
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.