» JeaseCMS » Документация

Скриптинг

Jease просто расширяется прямо через CMS запуском скриптов которые могут использоваться для всех нужд динамического управления. Просто добавьте Скрипт-Объект (Script-Object) в Jease и присвойте ему id с собственным расширением обозначающим семейство скрипта содержащегося в объекте.

JavaServerPages

"Из коробки" в Jease вы можете использовать JavaServerPages (с расширением ".jsp"). Просто создайте Скрипт-Объект, с именем News.jsp и введите следующий код как пример, который создает список всех опубликованных новостей:

<%@page import="jease.cms.domain.*,jease.site.*"%>
<% for(News news : Navigations.getSiteNews()) { %>
 <h2><%=news.getTitle()%> (<%= String.format("%tF", news.getDate())%>)</h2>
 <p>
   <%=news.getTeaser()%>
   <br />
   <a href="<%=news.getPath()%>?print">Read more...</a>
 </p> 
<% } %>

Другой пример создает карту сайта в виде XML-файла как подзадачу в вашем механизме поиска. Создайте этот скрипт с отмеченным атрибутом "Forward", что бы контент возвращался напрямую (без необходимости визуализации в разметке страницы).

<?xml version="1.0" encoding="UTF-8"?>
<%@page import="jfix.servlet.*,jease.cms.domain.*,jease.cmf.service.*" 
        contentType="text/xml; charset=utf-8" %>
<urlset
 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<%
  String domain = (request.isSecure() ? "https://" : "http://") +  Servlets.getHost(request) + request.getContextPath();
  for(Content content : Nodes.getRoot().getDescendants(Content.class)) { 
      if(content.isVisible()) {              
%>
 <url>
  <loc><%=domain %><%=content.getPath()%></loc>
  <lastmod><%=String.format("%tF",content.getLastModified())%></lastmod>
 </url>
<% } %>
<% } %>
</urlset>

Servlets (Сервлет)

Еще одной опцией в поставке Jease являются динамические сервлеты ( dynamic servlets), которые не нужно конфигурировать в web.xml. Просто создайте Script-Object с расширением ".java" и поместите в него код вашего сервлета. Об остальном позаботится Java-компилятор который скомпилирует и запустит сервлет на выполнение автоматически.

Что бы протестировать это, просто добавьте Script-Object с id=HelloServlet.java и поместите в него следующий код:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
  public void doGet (HttpServletRequest request,
                     HttpServletResponse response)
    throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.print("Hello " + request.getParameter("name"));
  }
}

Теперь вы можете вызвать сервлет и передать ему требуемый параметр (e.g. http://localhost:8080/HelloServlet.java?name=Jease).

ZUL Разметка

Jease позволяет также безшовную интеграцию с ZUML - основанным на ZK языком разметки (используйте расширение ".zul"). Ниже - пример простой контактной формы. Просто создайте Script с id=contact.zul и скопируйте в него код приведенный ниже.

Можете также посмотреть побльше здесь [./~/demo/zul ZUL showcases].

<vlayout width="100%"> 
  Name:
  <textbox id="name" hflex="1" constraint="no empty"/> 
  Email:
  <textbox id="email" hflex="1" constraint="/.+@.+\.[a-z]+/: No valid address" />
  Message:
  <textbox id="message" hflex="1" rows="10" constraint="no empty" /> 
  <button label="Send Message"> 
    <attribute name="onClick"><![CDATA[ 
      if(name.isValid() && email.isValid() && message.isValid()) { 
        jease.cms.service.Mails.send(
          email.value,
          "maik.jablonski@jease.org",
          "Message from " + name.value + " <" + email.value + ">",
          message.value
        );
        name.rawValue = email.rawValue = message.rawValue = null;
        Messagebox.show("We have received your message.", "Thank you!",
                        Messagebox.OK, Messagebox.INFORMATION);
      } else {
        Messagebox.show("All fields are required!", "Error", 
                        Messagebox.OK, Messagebox.ERROR);
      }
    ]]></attribute>
 </button> 
</vlayout>

Добавление другого скриптового языка

Если вы хотите добавить поддержку другого скриптового языка (на пример Groovy, Velocity, Freemarker), ва должны сконфигурировать сервлет который будет обрабатывать скриптовый язык.

Вот пример добавления поддержки Groovy в Jease:

  • Скачайте Groovy дистрибутив и скопируйте "groovy/embeddable/groovy-all.jar" в Jease/WEB-INF/lib.
  • Подправьте Jease/WEB-INF/web.xml для поддержки GroovyTemplateServlet:
<servlet>
 <servlet-name>GroovyTemplateServlet</servlet-name>
 <servlet-class>
  groovy.servlet.TemplateServlet
 </servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>GroovyTemplateServlet</servlet-name>
 <url-pattern>*.groovy</url-pattern>
</servlet-mapping>

Теперь вы можете использовать контент-тип "Script" для выполнения GroovyTemplates. Все что нужно сделать - это указать соответствующее (.groovy) как id для Script.

Пример "Sitemap.groovy"

<% import jease.cmf.service.*; %>
<% 
 Nodes.root.descendants.findAll{it.visible}.each {
  parents = it.parents.length;
  style = parents == 1 ? "font-weight: bold;" : 
                "margin-left: " + parents + "em;";
%>
  <a href="<%= it.path %>" style="<%= style %>">
   <%= it.title %>
  </a>
  <br />
<% } %>

Last modified on 2011-10-03 by Maik Jablonski