版权所有:(xiaodaoxiaodao)蓝小刀    xiaodaoxiaodao@gmail.com

http://www.blogjava.net/xiaodaoxiaodao/archive/2007/11/17/161240.html         

转载请注明来源/作者

 

alfresco WCM 在表单中自定义下拉框

 

alfresco 中使用WCM创建content的时候,如何在表单中使用自定义下拉框。

 

假设有一个webform,名称为news,使用news.xsd。我们知道xsd文件可以使用:

< xs:include schemaLocation =" /select_list_choices.xsd "/>

 

include 一个xsd select_list_choices.xsd 代码如下 ( 注意,下面的下拉框选择项比较少时,比如5个可能不会显示为下拉框,而是显示为radio button):

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:alf="http://www.alfresco.org" elementFormDefault="qualified">

    <xs:simpleType name=" select_list_choices ">

        <xs:restriction base="xs:string">

            <xs:enumeration value="channel01">

                <xs:annotation>

                    <xs:appinfo>

                        <alf:label> 财经新闻</alf:label>

                    </xs:appinfo>

                </xs:annotation>

            </xs:enumeration>

            <xs:enumeration value="channel02">

                <xs:annotation>

                    <xs:appinfo>

                        <alf:label> 娱乐新闻</alf:label>

                    </xs:appinfo>

                </xs:annotation>

            </xs:enumeration>          

            <xs:enumeration value="channel03">

                <xs:annotation>

                    <xs:appinfo>

                        <alf:label> 体育新闻</alf:label>

                    </xs:appinfo>

                </xs:annotation>

            </xs:enumeration>          

        </xs:restriction>

    </xs:simpleType>

</xs:schema>

 

上面的 下拉框是静态的,要想自定义, 则可以在news.xsdinclude一个jsp,在jsp中包含所需要的xsd代码。

 

现在我们自定义一个下拉框,创建一个新的webform,例如名称为channel-list,使用channel-list.xsd

<?xml version="1.0"?>

< xs:schema xmlns:xs =" http://www.w3.org/2001/XMLSchema " xmlns:cm =" http://www.lively.com/alfresco/cm " targetNamespace =" http://www.lively.com/alfresco/cm " elementFormDefault =" qualified ">

    < xs:element name =" select_list ">

        < xs:complexType >

            < xs:sequence >

                < xs:element name =" options " maxOccurs =" unbounded ">

                    < xs:complexType >

                        < xs:sequence >

                            < xs:element name =" value " type =" xs:normalizedString "/>

                            < xs:element name =" label " type =" xs:normalizedString "/>

                            < xs:element name =" description " type =" xs:normalizedString "/>

                        </ xs:sequence >

                    </ xs:complexType >

                </ xs:element >

            </ xs:sequence >

        </ xs:complexType >

    </ xs:element >

</ xs:schema >

 

 

使用这个webform创建content,比如创建在 /content/news 目录下,这些创建的数据就是下拉框中使用的内容,如上所示,下拉框使用value/label/description三个元素。则可以使用一个get_channel_list.jsp来取得这些创建的下拉框列表:

< jsp:root version =" 1.2 "

         xmlns:jsp =" http://java.sun.com/JSP/Page "

     xmlns:c =" http://java.sun.com/jsp/jstl/core "

     xmlns:cm =" http://www.lively.com/alfresco/cm ">   

  < jsp:directive.page language =" java " contentType =" text/html; charset=UTF-8 "/>

  < jsp:directive.page isELIgnored =" false "/>

 

      < c:set var =" path " value =" ${param['path']} "/>

     

      < c:if test =" ${empty path} ">

         < c:set var =" path " value =" /content/news "/>

      </ c:if >

     

      < c:set var =" contentType " value =" ${param['ctype']} "/>

     

      < c:if test =" ${empty contentType} ">

         < c:set var =" contentType " value =" channel-list "/>

      </ c:if >

     

  < xs:schema xmlns:xs =" http://www.w3.org/2001/XMLSchema "

            xmlns:alf =" http://www.alfresco.org "

         elementFormDefault =" qualified ">

   < xs:simpleType name =" select_list_choices ">

     < xs:restriction base =" xs:normalizedString ">

       < c:forEach items =" ${cm:getSelectList(pageContext,contentType,path)} " var =" options ">

         < jsp:element name =" xs:enumeration ">

            < jsp:attribute name =" value ">< c:out value =" ${options.value} "/></ jsp:attribute >

            < jsp:body >

              < xs:annotation >

                < xs:appinfo >

                      < alf:label >< c:out value =" ${options.label} "/></ alf:label >

                    </ xs:appinfo >

              </ xs:annotation >

            </ jsp:body >

          </ jsp:element >

       </ c:forEach >

     </ xs:restriction >

   </ xs:simpleType >

  </ xs:schema >

</ jsp:root >

 

上面的cm标签是我们自己定义的,可以参看附件(注意:可以在http://forge.alfresco.com/projects/wsf/上下载wsf1.5最新源码)。

 

最后,在xsd中引入这个get_channel_list.jsp

< xs:include schemaLocation =" / get_channel_list.jsp "/>

……

< xs:element name =" channel " type =" news: select_list_choices "/>

……

 

这样一个自定义的下拉框就可以实现了。

 

附: alfresco 比较重要的几个地址

官方wiki http://wiki.alfresco.com/wiki/Main_Page

论坛 http://forums.alfresco.com/

官方 forge http://forge.alfresco.com/

alfresco 下载地址 http://sourceforge.net/project/showfiles.php?group_id=143373

 

alfresco WCM在表单中自定义下拉框.pdf 下载地址:

alfresco WCM在表单中自定义下拉框.rar

使用的代码下载地址:

alfresco WCM在表单中自定义下拉框_source.rar


 

版权所有:(xiaodaoxiaodao)蓝小刀    xiaodaoxiaodao@gmail.com