Implemented the various classes needed to create a new JSF based runtime for webscripts. Added a new JSF component that implements the webscript runtime and is capable of rendering the output from a webscript url. This means that webscripts can be used in JSF pages, such as new dashlets in the Dashboard. Added some example dashlets that expose the Document List, My Tasks and My Web Forms webscripts as dashlets.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5664 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2007-05-11 10:34:29 +00:00
parent 4d0f604256
commit 4ca29b11dc
19 changed files with 777 additions and 113 deletions

View File

@@ -303,7 +303,10 @@ public abstract class WebScriptRuntime
* @param scriptRes Web Script Response
* @return true => execute script, false => do not execute script
*/
protected abstract boolean preExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes);
protected boolean preExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes)
{
return true;
}
/**
* Post-execution hook
@@ -313,6 +316,7 @@ public abstract class WebScriptRuntime
* @param scriptReq Web Script Request
* @param scriptRes Web Script Response
*/
protected abstract void postExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes);
protected void postExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes)
{
}
}

View File

@@ -107,22 +107,4 @@ public class WebScriptServletRuntime extends WebScriptRuntime
authenticator.authenticate(required, isGuest, req, res);
}
}
/* (non-Javadoc)
* @see org.alfresco.web.scripts.WebScriptRuntime#preExecute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse)
*/
@Override
protected boolean preExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes)
{
return true;
}
/* (non-Javadoc)
* @see org.alfresco.web.scripts.WebScriptRuntime#postExecute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse)
*/
@Override
protected void postExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes)
{
}
}

View File

@@ -0,0 +1,280 @@
/*
* 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
*/
package org.alfresco.web.scripts.jsf;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.FacesEvent;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.web.scripts.DeclarativeWebScriptRegistry;
import org.alfresco.web.scripts.WebScriptMatch;
import org.alfresco.web.scripts.WebScriptRegistry;
import org.alfresco.web.scripts.WebScriptRequest;
import org.alfresco.web.scripts.WebScriptResponse;
import org.alfresco.web.scripts.WebScriptRuntime;
import org.alfresco.web.scripts.WebScriptDescription.RequiredAuthentication;
import org.alfresco.web.scripts.portlet.WebScriptPortletRequest;
import org.alfresco.web.ui.common.component.SelfRenderingComponent;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.jsf.FacesContextUtils;
/**
* JSF Component implementation for the WebScript component.
* <p>
* Responsible for generating a JSF Component specific WebScriptRuntime instance and
* executing the specified WebScript against the runtime.
*
* @author Kevin Roast
*/
public class UIWebScript extends SelfRenderingComponent
{
private static Log logger = LogFactory.getLog(UIWebScript.class);
/** WebScript URL to execute */
private String scriptUrl = null;
private boolean scriptUrlModified = false;
private WebScriptRegistry registry;
private TransactionService txnService;
/**
* Default constructor
*/
public UIWebScript()
{
WebApplicationContext ctx = FacesContextUtils.getRequiredWebApplicationContext(
FacesContext.getCurrentInstance());
this.registry = (DeclarativeWebScriptRegistry)ctx.getBean("webscripts.registry");
this.txnService = (TransactionService)ctx.getBean("transactionComponent");
}
/**
* @see javax.faces.component.UIComponent#getFamily()
*/
@Override
public String getFamily()
{
return "org.alfresco.faces.Controls";
}
/**
* @see javax.faces.component.StateHolder#restoreState(javax.faces.context.FacesContext, java.lang.Object)
*/
public void restoreState(FacesContext context, Object state)
{
Object values[] = (Object[])state;
// standard component attributes are restored by the super class
super.restoreState(context, values[0]);
this.scriptUrl = (String)values[1];
this.scriptUrlModified = (Boolean)values[2];
}
/**
* @see javax.faces.component.StateHolder#saveState(javax.faces.context.FacesContext)
*/
public Object saveState(FacesContext context)
{
Object values[] = new Object[] {
super.saveState(context), this.scriptUrl, this.scriptUrlModified};
return values;
}
/* (non-Javadoc)
* @see javax.faces.component.UIComponentBase#broadcast(javax.faces.event.FacesEvent)
*/
@Override
public void broadcast(FacesEvent event) throws AbortProcessingException
{
if (event instanceof WebScriptEvent)
{
this.scriptUrlModified = true;
this.scriptUrl = ((WebScriptEvent)event).Url;
}
else
{
super.broadcast(event);
}
}
/* (non-Javadoc)
* @see javax.faces.component.UIComponentBase#decode(javax.faces.context.FacesContext)
*/
@Override
public void decode(FacesContext context)
{
Map requestMap = context.getExternalContext().getRequestParameterMap();
String fieldId = this.getClientId(context);
String value = (String)requestMap.get(fieldId);
if (value != null && value.length() != 0)
{
// found web-script URL for this component
try
{
String url = URLDecoder.decode(value, "UTF-8");
queueEvent(new WebScriptEvent(this, url));
}
catch (UnsupportedEncodingException e)
{
throw new AlfrescoRuntimeException("Unable to decode utf-8 script url.");
}
}
}
/**
* @see javax.faces.component.UIComponentBase#encodeBegin(javax.faces.context.FacesContext)
*/
@Override
public void encodeBegin(FacesContext context) throws IOException
{
// execute WebScript
if (logger.isDebugEnabled())
logger.debug("Processing UIWebScript encodeBegin(): " + getScriptUrl());
WebScriptRuntime runtime = new WebScriptJSFRuntime(context, getScriptUrl());
runtime.executeScript();
}
/**
* Set the scriptUrl
*
* @param scriptUrl the scriptUrl
*/
public void setScriptUrl(String scriptUrl)
{
this.scriptUrl = scriptUrl;
}
/**
* @return the scriptUrl
*/
public String getScriptUrl()
{
if (this.scriptUrlModified == false)
{
ValueBinding vb = getValueBinding("scriptUrl");
if (vb != null)
{
this.scriptUrl = (String)vb.getValue(getFacesContext());
}
}
return this.scriptUrl;
}
// ------------------------------------------------------------------------------
// Inner classes
/**
* Class representing the clicking of a webscript url action.
*/
public static class WebScriptEvent extends ActionEvent
{
public WebScriptEvent(UIComponent component, String url)
{
super(component);
Url = url;
}
public String Url = null;
}
/**
* Implementation of a WebScriptRuntime for the JSF environment
*
* @author Kevin Roast
*/
private class WebScriptJSFRuntime extends WebScriptRuntime
{
private FacesContext fc;
private String scriptUrl;
private String script;
WebScriptJSFRuntime(FacesContext fc, String scriptUrl)
{
super(registry, txnService);
this.fc = fc;
this.scriptUrl = scriptUrl;
this.script = WebScriptPortletRequest.getScriptUrlParts(scriptUrl)[2];
}
/**
* @see org.alfresco.web.scripts.WebScriptRuntime#authenticate(org.alfresco.web.scripts.WebScriptDescription.RequiredAuthentication, boolean)
*/
@Override
protected void authenticate(RequiredAuthentication required, boolean isGuest)
{
// JSF component already in an authenticated environment as the
// /faces servlet filter (or JSF portlet wrapper) is called first
}
/**
* @see org.alfresco.web.scripts.WebScriptRuntime#createRequest(org.alfresco.web.scripts.WebScriptMatch)
*/
@Override
protected WebScriptRequest createRequest(WebScriptMatch match)
{
return new WebScriptJSFRequest(fc, match, this.scriptUrl);
}
/**
* @see org.alfresco.web.scripts.WebScriptRuntime#createResponse()
*/
@Override
protected WebScriptResponse createResponse()
{
return new WebScriptJSFResponse(fc, UIWebScript.this);
}
/**
* @see org.alfresco.web.scripts.WebScriptRuntime#getScriptMethod()
*/
@Override
protected String getScriptMethod()
{
return "GET";
}
/**
* @see org.alfresco.web.scripts.WebScriptRuntime#getScriptUrl()
*/
@Override
protected String getScriptUrl()
{
return this.script;
}
}
}

View File

@@ -0,0 +1,225 @@
/*
* 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
*/
package org.alfresco.web.scripts.jsf;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.faces.context.FacesContext;
import org.alfresco.web.scripts.WebScriptMatch;
import org.alfresco.web.scripts.WebScriptRequest;
import org.alfresco.web.scripts.portlet.WebScriptPortletRequest;
/**
* Implementation of a WebScript Request for the JSF environment.
*
* @author Kevin Roast
*/
public class WebScriptJSFRequest implements WebScriptRequest
{
private WebScriptMatch match;
private FacesContext fc;
private String[] scriptUrlParts;
private Map<String, String> args = new HashMap<String, String>(4, 1.0f);
/**
* Constructor
*
* @param fc FacesContext
* @param match WebScriptMatch that matched this webscript
* @param scriptUrl The script URL this request is for
*/
WebScriptJSFRequest(FacesContext fc, WebScriptMatch match, String scriptUrl)
{
this.fc = fc;
this.match = match;
this.scriptUrlParts = WebScriptPortletRequest.getScriptUrlParts(scriptUrl);
if (this.scriptUrlParts[3] != null)
{
String[] parts = this.scriptUrlParts[3].split("&");
for (String argument : parts)
{
int sepIndex = argument.indexOf('=');
if (sepIndex != -1)
{
String value = "";
if (argument.length() > sepIndex + 1)
{
value = argument.substring(sepIndex + 1);
}
this.args.put(argument.substring(0, sepIndex), value);
}
}
}
}
/**
* Gets the matching API Service for this request
*
* @return the service match
*/
public WebScriptMatch getServiceMatch()
{
return this.match;
}
/**
* Get server portion of the request
*
* e.g. scheme://host:port
*
* @return server path
*/
public String getServerPath()
{
// NOTE: not accessable from JSF context - cannot create absolute external urls...
return "";
}
/**
* @see org.alfresco.web.scripts.WebScriptRequest#getContextPath()
*/
public String getContextPath()
{
return fc.getExternalContext().getRequestContextPath();
}
/**
* Gets the Alfresco Web Script Context Path
*
* @return service url e.g. /alfresco/service
*/
public String getServiceContextPath()
{
return fc.getExternalContext().getRequestContextPath() + scriptUrlParts[1];
}
/**
* Gets the Alfresco Service Path
*
* @return service url e.g. /alfresco/service/search/keyword
*/
public String getServicePath()
{
return getServiceContextPath() + scriptUrlParts[2];
}
/**
* Gets the full request URL
*
* @return request url e.g. /alfresco/service/search/keyword?q=term
*/
public String getURL()
{
return getServicePath() + (scriptUrlParts[3] != null ? "?" + scriptUrlParts[3] : "");
}
/**
* @see org.alfresco.web.scripts.WebScriptRequest#getQueryString()
*/
public String getQueryString()
{
return scriptUrlParts[3];
}
/**
* @see org.alfresco.web.scripts.WebScriptRequest#getParameterNames()
*/
public String[] getParameterNames()
{
Set<String> keys = this.args.keySet();
String[] names = new String[keys.size()];
keys.toArray(names);
return names;
}
/**
* @see org.alfresco.web.scripts.WebScriptRequest#getParameter(java.lang.String)
*/
public String getParameter(String name)
{
return this.args.get(name);
}
/**
* Gets the path extension beyond the path registered for this service
*
* e.g.
* a) service registered path = /search/engine
* b) request path = /search/engine/external
*
* => /external
*
* @return extension path
*/
public String getExtensionPath()
{
String servicePath = this.scriptUrlParts[2];
if (servicePath.indexOf('/') != -1)
{
return servicePath.substring(servicePath.indexOf('/'));
}
else
{
return null;
}
}
/**
* Determine if Guest User?
*
* @return true => guest user
*/
public boolean isGuest()
{
return Boolean.valueOf(getParameter("guest"));
}
/**
* Get Requested Format
*
* @return content type requested
*/
public String getFormat()
{
String format = getParameter("format");
return (format == null || format.length() == 0) ? "" : format;
}
/**
* Get User Agent
*
* TODO: Expand on known agents
*
* @return MSIE / Firefox
*/
public String getAgent()
{
// NOTE: unknown in the JSF environment
return null;
}
}

View File

@@ -0,0 +1,131 @@
/*
* 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
*/
package org.alfresco.web.scripts.jsf;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLEncoder;
import javax.faces.component.UIForm;
import javax.faces.context.FacesContext;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.web.scripts.WebScriptResponse;
import org.alfresco.web.ui.common.Utils;
import org.apache.myfaces.shared_impl.renderkit.html.HtmlFormRendererBase;
/**
* Implementation of a WebScript Response for the JSF environment.
*
* @author Kevin Roast
*/
public class WebScriptJSFResponse implements WebScriptResponse
{
private FacesContext fc;
private UIWebScript component;
WebScriptJSFResponse(FacesContext fc, UIWebScript component)
{
this.fc = fc;
this.component = component;
}
/**
* @see org.alfresco.web.scripts.WebScriptResponse#encodeScriptUrl(java.lang.String)
*/
public String encodeScriptUrl(String url)
{
UIForm form = Utils.getParentForm(fc, component);
if (form == null)
{
throw new IllegalStateException("Must nest components inside UIForm to generate form submit!");
}
String fieldId = component.getClientId(fc);
String formClientId = form.getClientId(fc);
StringBuilder buf = new StringBuilder(200);
// dirty - but can't see any other way to convert to a JSF action click...
buf.append("#\" onclick=\"");
buf.append("document.forms[");
buf.append("'");
buf.append(formClientId);
buf.append("'");
buf.append("]['");
buf.append(fieldId);
buf.append("'].value=");
buf.append("'");
// encode the URL to the webscript
try
{
buf.append(URLEncoder.encode(url, "UTF-8"));
}
catch (UnsupportedEncodingException e)
{
throw new AlfrescoRuntimeException("Unable to utf-8 encode script url.");
}
buf.append("'");
buf.append(";");
buf.append("document.forms[");
buf.append("'");
buf.append(formClientId);
buf.append("'");
buf.append("].submit();");
buf.append("return false;");
// weak, but this seems to be the way Sun RI/MyFaces do it...
HtmlFormRendererBase.addHiddenCommandParameter(fc, form, fieldId);
return buf.toString();
}
/**
* @see org.alfresco.web.scripts.WebScriptResponse#getOutputStream()
*/
public OutputStream getOutputStream() throws IOException
{
return fc.getResponseStream();
}
/**
* @see org.alfresco.web.scripts.WebScriptResponse#getWriter()
*/
public Writer getWriter() throws IOException
{
return fc.getResponseWriter();
}
/**
* @see org.alfresco.web.scripts.WebScriptResponse#setContentType(java.lang.String)
*/
public void setContentType(String contentType)
{
// Alfresco JSF framework only supports the default of text-html
}
}

View File

@@ -0,0 +1,88 @@
/*
* 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
*/
package org.alfresco.web.scripts.jsf;
import javax.faces.component.UIComponent;
import org.alfresco.web.ui.common.tag.BaseComponentTag;
/**
* JSF tag class for the UIWebScript component.
*
* @author Kevin Roast
*/
public class WebScriptTag extends BaseComponentTag
{
/**
* @see javax.faces.webapp.UIComponentTag#getComponentType()
*/
@Override
public String getComponentType()
{
return "org.alfresco.faces.WebScript";
}
/**
* @see javax.faces.webapp.UIComponentTag#getRendererType()
*/
@Override
public String getRendererType()
{
// the component is self renderering
return null;
}
/**
* @see javax.faces.webapp.UIComponentTag#setProperties(javax.faces.component.UIComponent)
*/
protected void setProperties(UIComponent component)
{
super.setProperties(component);
setStringProperty(component, "scriptUrl", this.scriptUrl);
}
/**
* @see javax.servlet.jsp.tagext.Tag#release()
*/
public void release()
{
super.release();
this.scriptUrl = null;
}
/**
* Set the scriptUrl
*
* @param scriptUrl the scriptUrl
*/
public void setScriptUrl(String scriptUrl)
{
this.scriptUrl = scriptUrl;
}
/** the scriptUrl */
private String scriptUrl;
}

View File

@@ -273,15 +273,5 @@ public class WebScriptPortlet implements Portlet
// Note: Do not render script if portlet window is minimized
return !WindowState.MINIMIZED.equals(req.getWindowState());
}
/* (non-Javadoc)
* @see org.alfresco.web.scripts.WebScriptRuntime#postExecute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse)
*/
@Override
protected void postExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes)
{
}
}
}

View File

@@ -184,6 +184,11 @@
<component-class>org.alfresco.web.ui.repo.component.UINavigator</component-class>
</component>
<component>
<component-type>org.alfresco.faces.WebScript</component-type>
<component-class>org.alfresco.web.scripts.jsf.UIWebScript</component-class>
</component>
<!-- ==================== CONVERTERS ==================== -->
<component>
<component-type>org.alfresco.faces.PermissionEvaluator</component-type>

View File

@@ -1973,4 +1973,32 @@
</attribute>
</tag>
<tag>
<name>webScript</name>
<tag-class>org.alfresco.web.scripts.jsf.WebScriptTag</tag-class>
<body-content>JSP</body-content>
<description>
Executes a webscript within the context of a JSF component.
</description>
<attribute>
<name>id</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>rendered</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>scriptUrl</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -1,30 +0,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"
--%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
<h:graphicImage value="/jsp/dashboards/dashlets/content-checkedout.png" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -22,9 +22,6 @@
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
--%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
<h:graphicImage value="/jsp/dashboards/dashlets/calendar.png" />
<r:webScript scriptUrl="/alfresco/service/doclist" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -22,9 +22,6 @@
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
--%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
<h:graphicImage value="/jsp/dashboards/dashlets/calculator.png" />
<r:webScript scriptUrl="/alfresco/service/mytasks" />

View File

@@ -22,9 +22,6 @@
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
--%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
<h:graphicImage value="/jsp/dashboards/dashlets/my-tasks-todo.png" />
<r:webScript scriptUrl="/alfresco/service/mywebforms" />

View File

@@ -1,30 +0,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"
--%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
<h:graphicImage value="/jsp/dashboards/dashlets/my-completed-tasks.png" />