Ejemplo completo de extensión frontend
Este ejemplo muestra cómo extender rápidamente las funciones de OpenKM con tecnologías JSP, HTML, CSS y JavaScript utilizando la API Java de OpenKM, y cómo utilizar las funciones JavaScript de los métodos JAVA de frontend expuestos.
Descargue el código del ejemplo de extensión complete_extension_sample.zip.
Descripción
Sección titulada «Descripción»El ejemplo se muestra en una nueva pestaña de Workspace.
La pantalla principal se muestra como una barra de herramientas con tres botones:
- El primer botón lleva a la pantalla principal del ejemplo.
- El segundo botón muestra el ejemplo 1
- El segundo botón muestra el ejemplo 2.
Estructura del proyecto:

Instalación
Sección titulada «Instalación»- Detenga la aplicación.
- Abra el contenido del archivo descargado en la carpeta $TOMCAT_HOME/webapps/OpenKM ( o mejor, en OpenKM.war )
- Elimine $TOMCAT_HOME/work/Catalina/localhost
- Inicie la aplicación.
- Compruebe la url http://localhost:8080/OpenKM/sample.
Detalles de implementación
Sección titulada «Detalles de implementación»index.jsp
Sección titulada «index.jsp»Index.jsp controla la altura del iframe con código JavaScript.
Otro aspecto importante es que, por ejemplo tras subir un documento ( Sample 2 ), se utiliza el parámetro urlToOpen para indicar qué url debe abrirse.
String urlToOpen = URLDecoder.decode(WebUtils.getString(request, "urlToOpen"),"UTF-8");if (urlToOpen.equals("")) { urlToOpen = "home.jsp";}menu.jsp
Sección titulada «menu.jsp»Contiene las definiciones de las urls del menú.

home.jsp
Sección titulada «home.jsp»Establece la pantalla principal de inicio.

Ejemplo 1
Sección titulada «Ejemplo 1»Se compone de 4 archivos:
- action.jsp ( el controlador principal donde se establece la lógica ).
- distributor.jsp ( la capa principal con dos columnas al 50% ).
- full_list.jsp ( muestra la lista completa sin control especial de JavaScript ).
- filtered_list.jsp ( muestra una lista filtrada sin control especial de JavaScript ).
action.jsp
Sección titulada «action.jsp»El controlador principal.
<%@page import="java.util.Map"%><%@page import="java.util.HashMap"%><%@page import="java.util.List"%><%@page import="java.util.ArrayList"%><%@ page import="java.text.SimpleDateFormat" %><%@ page import="java.io.IOException" %><%@ page import="org.slf4j.Logger" %><%@ page import="org.slf4j.LoggerFactory" %><%@ page import="com.openkm.bean.Document" %><%@ page import="com.openkm.util.WebUtils" %><%@ page import="com.openkm.api.OKMDocument" %><%@ page extends="com.openkm.extension.servlet.BaseServlet" %><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%!private static Logger log = LoggerFactory.getLogger("com.openkm.sample");public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String action = WebUtils.getString(request, "action"); try { list(request, response); } catch (Exception e) { log.error(e.getMessage(), e); sendErrorRedirect(request, response, e); }}
// Used by fileupload return and filterpublic void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { String action = WebUtils.getString(request, "action"); try { list(request, response); } catch (Exception e) { log.error(e.getMessage(), e); sendErrorRedirect(request, response, e); }}
private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, Exception { SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); String docPath = (String) request.getAttribute("docPath"); String nameFilter = WebUtils.getString(request,"nameFilter");
// Pending docs List<Map<String,String>> pendingDocMaps = new ArrayList<Map<String,String>>(); for ( Document doc : OKMDocument.getInstance().getChildren(null, "/okm:root")) { Map<String,String> docMap = new HashMap<String,String>(); docMap.put("name",doc.getPath().substring(doc.getPath().lastIndexOf("/")+1)); docMap.put("uuid",doc.getUuid()); docMap.put("path",doc.getPath()); docMap.put("mimeType",doc.getMimeType()); docMap.put("lastModified", df.format(doc.getLastModified().getTime())); pendingDocMaps.add(docMap); }
ServletContext sc = getServletContext(); sc.setAttribute("docPath",docPath); sc.setAttribute("nameFilter",nameFilter); sc.setAttribute("pendingDocuments",pendingDocMaps); sc.getRequestDispatcher("/sample/sample2/distributor.jsp").forward(request, response);}%>distributor.jsp
Sección titulada «distributor.jsp»La capa principal.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/sample/css/style.css" /> <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="<%=request.getContextPath() %>/js/vanadium-min.js" ></script></head><body> <table width="100%"> <tbody> <tr> <td valign="top" width="50%"> <jsp:include page="/sample/sample1/full_list.jsp"></jsp:include> </td> <td valign="top" width="10"></td> <td valign="top" width="50%"> <jsp:include page="/sample/sample1/filtered_list.jsp"></jsp:include> </td> </tr> </tbody> </table></body></html>