cancel
Showing results for 
Search instead for 
Did you mean: 

display Freemarker in JSP in explorer?

esource
Champ on-the-rise
Champ on-the-rise
I wanted to use Freemarker in JSPs in explorer.  How would I do this?  How would I create a dialog for example?
15 REPLIES 15

esource
Champ on-the-rise
Champ on-the-rise
Yes, it helps very much. Thank you!  Thank you for your posts!

Now, the question I have is how can I pass a list of Nodes,  a java.util.List of Nodes to my freemarker template and have it display the list as well as information from the list? 

I assume I would have to put this List in the model. 

I tried:

   model.put("nodeList", this.browseBean.getContent());‍‍‍

But this returns an error from Alfresco :

16:51:45,208 User:admin ERROR [ui.common.Utils] 05040003 Error during processing
of the template 'null'. Please contact your system administrator.
org.alfresco.service.cmr.repository.TemplateException: 05040003 Error during pro
cessing of the template 'null'. Please contact your system administrator.
        at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProc
essor.java:206)
        at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(Templ
ateServiceImpl.java:181)
        at org.alfresco.repo.processor.TemplateServiceImpl.processTemplate(Templ
ateServiceImpl.java:111)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflecti
on(AopUtils.java:304)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJo
inpoint(ReflectiveMethodInvocation.java:182)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:149)
        at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterc
eptor.invoke(AlwaysProceedMethodInterceptor.java:40)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethod
Interceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInte
rceptor.java:147)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.springframework.transaction.interceptor.TransactionInterceptor.in
voke(TransactionInterceptor.java:106)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy191.processTemplate(Unknown Source)
        at org.alfresco.web.ui.repo.component.template.UITemplate.encodeBegin(UI
Template.java:159)
        at javax.faces.webapp.UIComponentTag.encodeBegin(UIComponentTag.java:467
)
        at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:320)

        at org.apache.jsp.jsp.extension.dialogs.list_002dreport_jsp._jspx_meth_r
_005ftemplate_005f0(list_002dreport_jsp.java:97)
        at org.apache.jsp.jsp.extension.dialogs.list_002dreport_jsp._jspService(
list_002dreport_jsp.java:69)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:374)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
42)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDisp
atcher.java:630)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationD
ispatcher.java:535)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDis
patcher.java:472)
        at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary
.java:968)
        at org.apache.jsp.jsp.dialog.container_jsp._jspService(container_jsp.jav
a:647)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:374)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
42)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDisp
atcher.java:630)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(Applica
tionDispatcher.java:436)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationD
ispatcher.java:374)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDis
patcher.java:302)
        at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatc
h(ServletExternalContextImpl.java:419)
        at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspV
iewHandlerImpl.java:211)
        at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderRes
ponseExecutor.java:41)
        at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:
132)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(Authentica
tionFilter.java:110)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory
$1.invoke(ChainingSubsystemProxyFactory.java:122)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy187.doFilter(Unknown Source)
        at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxy
Filter.java:88)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.alfresco.repo.web.filter.beans.NullFilter.doFilter(NullFilter.jav
a:74)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory
$1.invoke(ChainingSubsystemProxyFactory.java:122)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(
ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami
cAopProxy.java:204)
        at $Proxy187.doFilter(Unknown Source)
        at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxy
Filter.java:88)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ss(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
7)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
        at java.util.HashMap$KeyIterator.next(HashMap.java:828)
        at org.alfresco.repo.template.FreeMarkerProcessor.convertValue(FreeMarke
rProcessor.java:353)
        at org.alfresco.repo.template.FreeMarkerProcessor.convertValue(FreeMarke
rProcessor.java:371)
        at org.alfresco.repo.template.FreeMarkerProcessor.convertValue(FreeMarke
rProcessor.java:359)
        at org.alfresco.repo.template.FreeMarkerProcessor.convertToFreeMarkerMod
el(FreeMarkerProcessor.java:312)
        at org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProc
essor.java:201)
        … 90 more

savic_prvoslav
Champ on-the-rise
Champ on-the-rise
i do not know that this is possible, because space is made for this reason .

Can you tell how would you get this list of nodes?

esource
Champ on-the-rise
Champ on-the-rise
I perform a search in Alfresco from which I receive a search result list.  I then modified browse.jsp, adding a button

<td style="padding-right:4px" align=right>      <%– custom button  –%>      <nobr><a:actionLink value="CustomButton" image="/custom/images/icons/customButton.png" style="white-space:nowrap" actionListener="#{CustomDialog.myMethod}" id="mylink1" /></nobr></td> ‍‍‍‍‍‍

Clicking this button opens CustomDialog calling myMethod:

public class CustomDialog extends BaseDialogBean {     Map<String, Object> templateModel;          protected TemplateImageResolver imageResolver;   public void myMethod(ActionEvent event) {      imageResolver = new TemplateImageResolver() {            public String resolveImagePathForName(String filename,               FileTypeImageSize size) {                FacesContext context = FacesContext.getCurrentInstance();                ServletContext servletContext = ((HttpServletRequest) context                   .getExternalContext().getRequest()).getSession()                   .getServletContext();                return FileTypeImageUtils.getFileTypeImage(servletContext,                   filename, size);            }      };      // go to custom dialog                FacesContext fc = FacesContext.getCurrentInstance();      fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "dialog:custom");               }     public Map getTemplateModel()     {           Map<String, Object> model = new HashMap<String, Object>(4, 1.0f);                                model.put("nodeList", this.browseBean.getContent());           model.put(TemplateService.KEY_IMAGE_RESOLVER, imageResolver);                      return model;     }   @Override   protected String finishImpl(FacesContext context, String outcome) throws Exception {      // return the default outcome      return outcome;   }      public TemplateImageResolver getImageResolver() {      return imageResolver;   }   public void setImageResolver(TemplateImageResolver imageResolver) {      this.imageResolver = imageResolver;   }   public void setTemplateModel(Map<String, Object> templateModel) {      this.templateModel = templateModel;   }}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

this attempts to open a dialog, but an error results from the call to

model.put("nodeList", this.browseBean.getContent());

web-client-config-custom.xml
         <dialog name="custom" page="/jsp/extension/dialogs/custom.jsp" managed-bean="CustomDialog"                    icon="/custom/images/icons/custom_1.gif" title="Custom"                     description="Displays custom list" />‍‍‍‍‍


faces-config-custom.xml
   <managed-bean>      <managed-bean-name>CustomDialog</managed-bean-name>      <managed-bean-class>co.esource.web.bean.CustomDialog</managed-bean-class>      <managed-bean-scope>session</managed-bean-scope>        <managed-property>         <property-name>nodeService</property-name>         <value>#{NodeService}</value>       </managed-property>       <managed-property>         <property-name>browseBean</property-name>         <value>#{BrowseBean}</value>       </managed-property>                </managed-bean>‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

custom.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %><r:template template="alfresco/templates/custom.ftl" model="#{CustomDialog.templateModel}" /> ‍‍‍‍‍‍‍

esource
Champ on-the-rise
Champ on-the-rise
If I remove the call to :

model.put("nodeList", this.browseBean.getContent());‍‍‍

no error occurs.  And in fact I can pass values from CustomDialog to the freemarker template via the model as an example:

model.put("hello","hello, how are you");‍‍‍

And I also have access to the node results from the search, but the values have to be transcribed, copied into my own custom node as example:

     public Map getTemplateModel()     {          nameList = new java.util.ArrayList<String>();                  customList = new java.util.ArrayList<customNode>();                List<Node> searchResults = this.browseBean.getContent();            Integer searchResultsCount = searchResults.size();         for(ListIterator<Node>li=searchResults.listIterator(); li.hasNext(); )          {               Node resultNode = li.next();               String Name = resultNode.getName();                         nameList.add(Name);                         customList.add(new customNode(resultNode));          }           Map<String, Object> model = new HashMap<String, Object>(4, 1.0f);           model.put("names", nameList);           model.put("custom", customList);                     //model.put("nodeList", this.browseBean.getContent());           model.put(TemplateService.KEY_IMAGE_RESOLVER, imageResolver);                      return model;     }‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

esource
Champ on-the-rise
Champ on-the-rise
So, I can get search results to display in freemarker but I cannot send the nodes directly.  It seems the nodes have to be copied into custom objects.

savic_prvoslav
Champ on-the-rise
Champ on-the-rise
you can perform a search into freemarker with
childrenByLuceneSearch
Returns a map capable of executing a search against the entire repository based on a Lucene search string. It returns a sequence of nodes which represent the objects from the results of the search, such as companyhome.childrenByLuceneSearch["TEXT:alfresco* AND TEXT:tutorial*"]. The value can be any valid Lucene search string supported by Alfresco. Note that you may need to escape Lucene specific characters. Note that the entire repository is searched: the current node is only used as an access point to retrieve the search object.


http://wiki.alfresco.com/wiki/Template_Guide you have this hire.
Welcome to the new Hyland Connect. Get started or submit feedback.