生成XML以便在Apache Cocoon 2.2中处理时如何读取流程值

时间:2013-10-22 21:15:06

标签: apache-cocoon

我有一个简单的flowcript函数可以执行此操作:

cocoon.sendPage("page/index",
  {
    username : "SomeName"
  }
);

在我的sitemap.xmap中,我有这样的配置:

<map:pipeline internal-only="true">
  <map:match pattern="page/*">
    <map:generate src="xml/{1}.xml"/>
    <map:transform src="xslt/html.xslt"/>
    <map:serialize type="html"/>
  </map:match>
</map:pipeline>

我在html.xslt文件中使用xsl:stylesheet来读取page.xml文件中的值。它简单直接(并按预期工作)。

但是:我想在page.xml文件中读取flowcript值(此处为:username),以便将其传递给html.xslt文件。这可以通过jx:template完成吗? (我发现的例子,但它们在Apache Cocoon 2.2中不能很好地工作,只有早期版本..)如果不是jx:模板的解决方案:还有什么?

1 个答案:

答案 0 :(得分:0)

要从flowcript读取值,可以使用JX Template Generator。但与Cocoon 2.1及更早版本不同,您不应在站点地图的map:generator-section中明确引用org.apache.cocoon.generation.JXTemplateGenerator。

供将来参考,这是解决方案(使用Apache Cocoon 2.2和Maven 3.0.4):

1)确保你的pom.xml依赖于cocoon-template-impl(JXTemplateGenerator已移到这里)

<dependency>
   <groupId>org.apache.cocoon</groupId>
   <artifactId>cocoon-template-impl</artifactId>
   <version>1.1.0</version>
 </dependency>

验证您的Maven存储库是否包含库。如果没有:安装它。

2)在flowcript中:有一个函数可以设置一些值并调用.SendPage()/。SendPageAndWait()

cocoon.sendPage("page/index",
  {
    username : "SomeName"
  }
);

3)在sitemap.xmap中:生成XML文件时,请确保它们具有 type =“jx”

<map:pipeline internal-only="true">
  <map:match pattern="page/*">
    <map:generate type="jx" src="xml/{1}.jx.xml"/>
    <map:transform src="xslt/page.xslt"/>
    <map:serialize type="html"/>
  </map:match>
</map:pipeline>

4)在.jx.xml文件中:读取这样的值

<?xml version="1.0" encoding="UTF-8"?>
<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
<valuesFromFlowscript>
  <!-- Select values from flowscript -->
  <username>${username}</username>
</valuesFromFlowscript>
</jx:template>

5)在你的.xslt文件中,你可以像这样读取生成的值

<xsl:value-of select="valuesFromFlowscript/username"/>