1. Trang chủ
  2. » Công Nghệ Thông Tin

Quản lý cấu hình web - part 37 ppsx

10 185 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 6,86 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

And then while creating any content, if we want to use it, we will refer it with the ID, and at the time of rendering the response through the web script, it will replace those tag IDs w

Trang 1

Calling web scripts from a JSP page

Now we will create a simple JSP page from which we will make a call to our web script to render the news page This JSP can be a part of any of your web applications

To call a web script from the JSP, this will be an HTTP call Just add the following scriptlet in the JSP file wherever you want to include the HTML output of this web script:

<%

String resultString = "";

HttpClient client = new HttpClient();

client.getState().setCredentials(

new AuthScope("localhost", 8080, "Alfresco"),

new UsernamePasswordCredentials("admin", "admin")

);

GetMethod get = new

GetMethod("http://localhost:8080/alfresco/service/org/cignex/news/ getNewsItem.html?storeId=wwwcignex&newsId=newsAlfrescoBookRelease xml");

get.setDoAuthentication(true);

try {

int status = client.executeMethod( get );

resultString = get.getResponseBodyAsString();

out.println(resultString);

} finally {

get.releaseConnection();

}

%>

Because we are using an HTTP client, we also need to import the used classes here

in this scriptlet before using it To import those, we can use the page directive of JSP as follows:

<%@ page import="org.apache.commons.httpclient.HttpClient" %>

<%@ page import="org.apache.commons.httpclient.

UsernamePasswordCredentials" %>

<%@ page import="org.apache.commons.httpclient.auth.AuthScope" %>

<%@ page import="org.apache.commons.httpclient.methods.GetMethod" %>

This will import all of the required classes

Trang 2

The source files for the whole JSP page can be downloaded from the Packt website

The following screenshot is the output of that JSP page This JSP page is part of a sample web application, which is outside of Alfresco and deployed on a separate Tomcat web server:

Trang 3

Enhancing the news item web script

In this case study, we will make enhancements to the previously mentioned news web script Consider a case where you have some part of the content that is being used in multiple places, such as some contact number, e-mail address, link URLs, and so on When this kind of content needs to be modified in the future, you will need to modify it at multiple places Instead, we can have a concept where we store this kind of content at one place and then refer that in all of the places when we want

to actually use it In this way, it will enable reusability and it will be easier to modify

it in the future No longer will we have to modify the same content at multiple places; we just need to modify it at one place and that will be reflected in all of the places where it is being used

Consider this kind of content as tag and store it separately in one place only We can then refer to it with its tag ID in the actual content when it needs to be used This means we will have one tag mapping XML file where we will store all these kinds of tags with some ID and value And then while creating any content, if we want to use

it, we will refer it with the ID, and at the time of rendering the response through the web script, it will replace those tag IDs with actual values

Create a TagMapping.xml file in the /ROOT/common folder under your web project using the tag_mapping web form

Download the XSD file for this web form from the Packt website

In the news content used in the previous case study, the website URL for the book

is used at multiple places We will create a tag for this and then use this tag in the news content

A sample TagMapping.xml file looks like:

<?xml version="1.0" encoding="UTF-8"?>

<items xmlns:alf="http://www.alfresco.org" xmlns:chiba="http:// chiba.sourceforge.net/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:xhtml="http:// www.w3.org/1999/xhtml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<item>

<id>phone_number</id>

<value>1-408-923-4231</value>

</item>

<item>

<id>book_website</id>

Trang 4

<value>http://www.packtpub.com/alfresco-3-enterprise-content- management-implementation/book/mid/160609knbhtv</value>

</item>

</items>

Here we have created a tag for the URL of the website for our Alfresco book with ID

book_website, and in value we have specified the URL for this

Now when we create XML content for the news, wherever we want to mention the book URL, instead of writing the actual URL, we will refer this tag with ID

book_website as:

<a href="${book_website}">Alfresco 3 Enterprise Content Management Implementation</a>

We need to use it as ${tag_id} only (syntax for a FreeMarker template), because

we are going to use the template service to replace this tag's runtime with the actual value of this tag

Web script for getting the details of a

particular news item

Now let's look at the web script changes for this In this example, we will see how we can fetch the details of an individual news item

Description document

The description document, getNewsItem.get.desc.xml, will be the same as used in the previous example

Java-backed Bean for web scripts

We use the same Java Bean class, GetNewsItem, which extends the

DeclarativeWebScript class, but we will modify this class as follows:

1 Render the intermediate template model (getNewsItem.get.html.model ftl) with the renderTemplate method of template service as:

renderTemplate(templatePath, map, out);

where templatePath is the path for the file getNewsItem.get.html.model ftl, map is the model map of the news item, and out is used to store the intermediate result of this rendering

Trang 5

2 Create a tag model map by processing the TagMapping.xml file.

3 Then process this tag model over the result of that intermediate template rendering with the processTagging method of template service as:

result = templateService.processTemplateString(

"freemarker", template, modelMap);

where freemarker indicates the use of FreeMarker as the template processor,

template is the intermediate result generated by rendering of the template in the previous step, modelMap is the model map created by processing the tag mapping file, and result will hold the final result after replacing all of the tags with actual values

Here we are using the template service to render and process the

FreeMarker template

4 Now in the Spring Bean configuration file, web-script-custom-context.xml,

in the tomcat/webapps/alfresco/WEB-INF/classes/alfresco/extension

folder, we need to add template service as a property for that Bean as we are using this new service for our example as:

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN'

'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>

<! Web Script Storage >

<bean id="webscript.org.cignex.news.getNewsItem.get" class="com cignex.web.scripts.bean.news.GetNewsItem" parent="webscript"> <property name="contentService" ref="ContentService" />

<property name="avmService" ref="AVMService" />

<property name="templateService" ref="TemplateService" /> </bean>

</beans>

Response template

The intermediate rendering template for the HTML response, the getNewsItem get.html.model.ftl file is as follows:

<#ftl ns_prefixes={"D", "http://www.alfrescobook.com/news"}>

<#if m_news?exists>

<table width="100%" cellspacing="0" cellpadding="0" border="0"> <tr>

<#assign newsItem = m_news>

<td>

<h2>${newsItem.contentHeader}</h2>

Trang 6

<strong>News Date:</strong>

${newsItem.newsDate}

</#if>

<#if newsItem.contentSubHeader != "" >

<h4>${newsItem.contentSubHeader}</h4>

</#if>

<table width="50%" cellspacing="0" cellpadding="5" border="0"> <tr>

<td>

<tr>

<h4> ${newsItem.imageTitle}</h4>

<#if newsItem.contentGraphic != "" >

<td>

<img src="${newsItem.contentGraphic}" border=0/> </td>

</#if>

</tr>

</td>

<td>

<strong> ${newsItem.imageCaption}</strong> </td>

</tr>

<tr>

<td>

${newsItem.contentText}

</td>

</tr>

</table>

</td>

</tr>

</table>

</#if>

</html>

And finally, the rendering template, the getNewsItem.get.html.ftl file, is:

<html>

${finalXML}

</html>

Trang 7

Storing / registering the web script in Alfresco

There is no change in the description document, but upload the new template file

getNewsItem.get.html.model.ftl in the Company Home | Data Dictionary

| Web Scripts Extensions | org | cignex | news folder Also, modify the

getNewsItem.get.html.ftl file that already exists there accordingly

Navigate to http://localhost:8080/alfresco/service/index and click on the

Refresh Web Scripts button to view the changes.

Calling the web script from a JSP page

There will not be any changes for this The same JSP that was used in the previous case can be used to call this web script, and the same result will be displayed:

As shown in the previous screenshot, the actual book page URL being displayed in the status bar comes from the tag mapping file

Trang 8

You can download the code samples for web script-related and blog module-related files for this case study from the Packt website

Integrating Alfresco WCM and a

Surf-based web application

In this case study, we will refer to the same web script we used in the first case study

(Integrating Alfresco WCM and Liferay with a news portlet) For integrating this with a

Surf-based web application, we need to create a JSON response format for the same web script

Refer to the Integrating Alfresco WCM and Liferay with a news portlet section for more

details on the web script for getting a news headline

Response template

The rendering template for the JSON response, the getNewsItem.get.json.ftl file,

is as follows:

<#escape x as jsonUtils.encodeJSONString(x)>

{

"newsItems": [

<#if m_newsNodes?exists>

<#list m_newsNodes as newsNode>

<#assign newsItemDom = newsNode.xmlNodeModel/>

<#if newsItemDom?exists>

<#assign newsItem = newsItemDom.news>

<#if newsItem?exists>

{

"Headline":"${newsItem.contentHeader}"

}

</#if>

</#if>

<#if newsNode_has_next>,</#if>

</#list>

</#if>

]

}

</#escape>

Trang 9

Integrating web scripts with a SURF

application

In the Communication with Web Content Management section of Chapter 9, we have

already explained the configuration required at Surf side to call web scripts from Alfresco, along with a UI web script that will be responsible for rendering the page And the web script we mentioned earlier in this section is a data web script, which will be responsible for fetching content from the repository

In Surf, we have already created a header web script to display the main page We have also created a web script to display the news header in Surf Now we will call the news web script in the same (header) web script to integrate news headline on the same page

The following screenshot shows the main page from the Surf application where we have integrated the WCM web script Content is fetched from the repository:

You can download the code samples from the Packt website

Trang 10

In this chapter, we covered the REST architecture at high level and saw how an Alfresco web script allows users to integrate Alfresco with any external application easily, independent of the technology In this way, you can use Alfresco WCM purely for content authoring and as a content production system without worrying about the frontend rendering of it Hence, the same Alfresco WCM content can be used and rendered in different ways with multiple applications Again, web scripts support different output formats, including XML, JSON, and so on, so you can generate the output in the format expected by the frontend application very easily Mainly we discussed:

• REST architecture and web script framework in Alfresco

• Different components of a web script

• How to develop web scripts in Alfresco

• How to integrate Alfresco WCM with external systems using web scripts

In the next chapter, we will discuss how we can leverage the Alfresco framework for WCM

Ngày đăng: 05/07/2014, 20:21

TỪ KHÓA LIÊN QUAN