<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title></title>
    <description>有时候一个工作学习挺孤单,但从来没有孤独过.因为自己渴望接受新的事物,拥有挑战不会孤单</description>
    <link>http://hatlar.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>liferay权限探索续</title>
        <author>hatlar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hatlar.javaeye.com">hatlar</a>&nbsp;
          链接：<a href="http://hatlar.javaeye.com/blog/201008" style="color:red;">http://hatlar.javaeye.com/blog/201008</a>&nbsp;
          发表时间: 2008年06月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>写liferay权限开发的时候,总感觉迷迷糊糊的,现在又多明白了点,写出来省得大家看上篇文章和我一样迷糊.</p>
<p>&nbsp;liferay的权限开发可以分为两类,portal和model的权限开发.一般的权限开发针对portal就可以了,主要是整体的操作,而model的权限开发主要是针对实体的,比如blog的文章内容,浏览者只能看,而blog的拥有者可以更新,增加,查看等功能.可以通过对实体的操作来实现这些权限控制,把权限分配到具体的操作实体的方法上,比如删除实体,更新实体等,权限验证也是在操作实体的具体类中,添加资源是在localService实现的,权限的验证是在service中实现的.总之,model的权限开发主要是针对实体的操作,是一种隐含式操作,数据的获得上从请求中得到的,不如groupId,addGuestPermission,addCommunityPermission.而portal权限的开发是通过JSP页面就可以严整的,通过验证返回的数值,来判断是否应该显示给浏览者.还有很多细节要验证,以后再写了!</p>
<p>权限开发:</p>
<p>&nbsp;&nbsp;&nbsp; 自定义权限的名称:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在权限的开发中WebKeys.+权限名字.其实质是字符串,并且值是和resource-actions中的权限值是一样的(经过验证是一样,并且源程序也表明是这样的),这样就可以我们自己定义权限的名称,不过同时也带来一个问题,就是在权限配置的界面显示的是可能会出现问题,这样就要看langguage的属性文件,在文件中可以找到,action的部分,里面定义了WebKeys中对应的值,因此通过增添aciton+权限名=自己想显示在权限配制的界面上的内容(猜测,有待证实)</p>
          <br/>
          <span style="color:red;">
            <a href="http://hatlar.javaeye.com/blog/201008#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Jun 2008 16:52:00 +0800</pubDate>
        <link>http://hatlar.javaeye.com/blog/201008</link>
        <guid>http://hatlar.javaeye.com/blog/201008</guid>
      </item>
      <item>
        <title>liferay权限探索</title>
        <author>hatlar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hatlar.javaeye.com">hatlar</a>&nbsp;
          链接：<a href="http://hatlar.javaeye.com/blog/200101" style="color:red;">http://hatlar.javaeye.com/blog/200101</a>&nbsp;
          发表时间: 2008年06月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>真不好意思,上次对liferay仅仅写了简略的概括.后来发现那么多人浏览,现在想来真是对不住大家.</p>
<p>我现在把权限开发的部分写出来,希望对大家有帮助.</p>
<p>权限开发有四个步骤:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、定义所有的资源和权限</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、添加资源</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、把资源和必须的许可联系起来</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、返回资源前检查权限</p>
<p>其核心是资源的添加，资源的删除和权限的检查。</p>
<p>其中用的核心代码：</p>
<p>添加资源：使用的的类是ResourceLocalService,方法是addResource(String companyId,String usrId,String name,String primkey,boolean&nbsp; portletActions,boolean addCommnunityPermission,boolean addGuestPermission)</p>
<p>&nbsp;&nbsp; 其中如果要能知道方法中各个变量的数据来源，那对整个权限开发有很大的帮助。首先是userId的来源，它是从PrincipalBean获得的，如果你看过PrincipalBean的源代码，你可以看到getUser（）方法，所以你可以在ServiceImpl中获得userId,并且把它作为写入到addEntry()(可以自己定义方法名）中，添加资源的功能一般是在localServiceImpl中实现的，而companyId的获得经过一系列的过程，可以用一下数学的表达方式来表示：</p>
<p>User user = userPersistence.findByPrimaryKey(userId);其中userId已经在上一级获得</p>
<p>companyId=user.getCompanyId();</p>
<p>userId=user.getUserId();(不知道得到的userId和作为参数引入的userId是否一样，不过通过user获得userId作为addResource()的参数肯定不错）。</p>
<p>而另一个重要参数groupId的获得要比这个复杂些。</p>
<p>long groupId=PortalUtil.getPortletGroupId(piId)</p>
<p>pild=layout.getPild()</p>
<p>layout=themeDisplay.getLayout()</p>
<p>themeDisplay=(ThemeDisplay)request.getAttribute(WebKey.THEME_DISPLAY)</p>
<p>其中layout,themeDisplay，plid是在ation中获得，并把plid作为参数传递给serviceUtil的addEntry()方法&nbsp;.</p>
<p>通过一级一级的传递，在localService中通过PortalUtil.getPortletGroupId(plid)获得，然后作为addResource的参数，实现把资源添加到数据中。其中companyId也是在这个阶段获得的。</p>
<p>另外portalAction,addCommunityPermission,addGuestPermission的数值是自己定义的，不是从系统中获得的。</p>
<p>删除资源deleteResource(<br />&nbsp;&nbsp;&nbsp;CompanyId(),&nbsp;name,&nbsp;&nbsp;ResourceImpl.SCOPE_INDIVIDUAL,EntryId());</p>
<p>其中companyId和添加资源用到的companyId是一样的。</p>
<p>&nbsp;权限检查</p>
<p>permissionChecker.hasPermission(groupId,name,PrimaryKey(), actionId);</p>
<p>其中groupId和添加资源中的groupId是一样的，name是实体类的类名，primaryKey是实体的关键字，actionI对资源的操作。</p>
<p>先写这么多</p>
<p>&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://hatlar.javaeye.com/blog/200101#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 04 Jun 2008 14:51:53 +0800</pubDate>
        <link>http://hatlar.javaeye.com/blog/200101</link>
        <guid>http://hatlar.javaeye.com/blog/200101</guid>
      </item>
      <item>
        <title>liferay开发小总</title>
        <author>hatlar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hatlar.javaeye.com">hatlar</a>&nbsp;
          链接：<a href="http://hatlar.javaeye.com/blog/195077" style="color:red;">http://hatlar.javaeye.com/blog/195077</a>&nbsp;
          发表时间: 2008年05月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>通过近一个半月的学习,对liferay的整体开发结构有了初步了解.liferay的开发主要分为:</p>
<p>&nbsp;1、 应用组件开发。其中应用组件中包含功能开发、显示内容开发（portlet的JSP页面的内容显示部分)，显示样式开发（portlet内容的显示样式）。功能开发主要设计到数据库操作（查询、删除、增加等）、portlet的权限开发。</p>
<p>2、主题开发（整个页面的显示效果）</p>
<p>3、布局开发</p>
<p>4、权限开发</p>
<p>&nbsp;</p>
<p>真不好意思,上次对liferay仅仅写了简略的概括.后来发现那么多人浏览,现在想来真是对不住大家.</p>
<p>我现在把权限开发的部分写出来,希望对大家有帮助.</p>
<p>权限开发有四个步骤:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、定义所有的资源和权限</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、添加资源</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、把资源和必须的许可联系起来</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、返回资源前检查权限</p>
<p>其核心是资源的添加，资源的删除和权限的检查。</p>
<p>其中用的核心代码：</p>
<p>添加资源：使用的的类是ResourceLocalService,方法是addResource(String companyId,String usrId,String name,String primkey,boolean&nbsp; portletActions,boolean addCommnunityPermission,boolean addGuestPermission)</p>
<p>&nbsp;&nbsp; 其中如果要能知道方法中各个变量的数据来源，那对整个权限开发有很大的帮助。首先是userId的来源，它是从PrincipalBean获得的，如果你看过PrincipalBean的源代码，你可以看到getUser（）方法，所以你可以在ServiceImpl中获得userId,并且把它作为写入到addEntry()(可以自己定义方法名）中，添加资源的功能一般是在localServiceImpl中实现的，而companyId的获得经过一系列的过程，可以用一下数学的表达方式来表示：</p>
<p>User user = userPersistence.findByPrimaryKey(userId);其中userId已经在上一级获得</p>
<p>companyId=user.getCompanyId();</p>
<p>userId=user.getUserId();(不知道得到的userId和作为参数引入的userId是否一样，不过通过user获得userId作为addResource()的参数肯定不错）。</p>
<p>而另一个重要参数groupId的获得要比这个复杂些。</p>
<p>long groupId=PortalUtil.getPortletGroupId(piId)</p>
<p>pild=layout.getPild()</p>
<p>layout=themeDisplay.getLayout()</p>
<p>themeDisplay=(ThemeDisplay)request.getAttribute(WebKey.THEME_DISPLAY)</p>
<p>其中layout,themeDisplay，plid是在ation中获得，并把plid作为参数传递给serviceUtil的addEntry()方法&nbsp;.</p>
<p>通过一级一级的传递，在localService中通过PortalUtil.getPortletGroupId(plid)获得，然后作为addResource的参数，实现把资源添加到数据中。其中companyId也是在这个阶段获得的。</p>
<p>另外portalAction,addCommunityPermission,addGuestPermission的数值是自己定义的，不是从系统中获得的。</p>
<p>删除资源deleteResource(<br />&nbsp;&nbsp;&nbsp;CompanyId(),&nbsp;name,&nbsp;&nbsp;ResourceImpl.SCOPE_INDIVIDUAL,EntryId());</p>
<p>其中companyId和添加资源用到的companyId是一样的。</p>
<p>&nbsp;权限检查</p>
<p>permissionChecker.hasPermission(groupId,name,PrimaryKey(), actionId);</p>
<p>其中groupId和添加资源中的groupId是一样的，name是实体类的类名，primaryKey是实体的关键字，actionI对资源的操作。</p>
<p>先写这么多</p>
<p>&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://hatlar.javaeye.com/blog/195077#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 21 May 2008 08:53:01 +0800</pubDate>
        <link>http://hatlar.javaeye.com/blog/195077</link>
        <guid>http://hatlar.javaeye.com/blog/195077</guid>
      </item>
      <item>
        <title>liferay-ext下的开发流程和解释</title>
        <author>hatlar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hatlar.javaeye.com">hatlar</a>&nbsp;
          链接：<a href="http://hatlar.javaeye.com/blog/191011" style="color:red;">http://hatlar.javaeye.com/blog/191011</a>&nbsp;
          发表时间: 2008年05月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp; 古语说的好:"<span style="color: #000000;">独学则无友,孤陋而寡闻".我想应该是自己走出来的时候了,IT是不允许闭门造车的.IT的灵魂应该是交流,大家共同的进步.我习惯一个学习,并不是我喜欢一个人学习.&nbsp;&nbsp;</span>希望我对liferay在ext开发的认识,对大家有帮助.首先要感谢把资料传到网上的朋友和飞哥的指点.</p>
<p>&nbsp;开发流程:1、在ext-impl中创建portlet的文件夹。2、修改ext-imp下的build.xml文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="build-service-portlet-reports"&gt;其中builde-service-portlet-reports是自己命名的。<br />service"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name="service.file" value="src/com/ext/portlet/Reports/service.xml" /&gt;<br />&nbsp;&nbsp;&nbsp;&lt;/antcall&gt;<br />&nbsp;&nbsp;&lt;/target&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;target name="build-services"&gt;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;antcall target="build-service-portlet-terminal" /&gt;新增加的命令<br />&nbsp;&lt;/target&gt;&nbsp;&nbsp;执行ant下的&nbsp;&nbsp;build-service-portlet-reports，则自动生成一些类。</p>
<p>&nbsp;&nbsp; 这些类分为两个部分；一部分是拥有一些代码&nbsp;&nbsp;ReportsEntryImpl(实体类），&nbsp;&nbsp;&nbsp;ReportsEntryPersistenceImpl（持久层的类）&nbsp;&nbsp;TerminalUtil实现对实体的操作。</p>
<p>&nbsp;另一部分&nbsp;&nbsp;&nbsp;本身没有代码&nbsp;&nbsp;&nbsp;ReportsEntryService（接口）&nbsp;&nbsp;，&nbsp;&nbsp;ReportsEntrylServiceImpl&nbsp;&nbsp;（实现ReportsEntryService接口），ReportsEntryServiceUtil（实现对实体的操作，把数据写到数据库、或查询数据库）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 两者的关系，ReportsEntryService中要自己写要实现的方法，比如插入，删除等。ReportsEntryServiceImpl则要实现这些方法，其中ReportsEntryServiceImpl要实现自己的方法，通过使用ReportsEntryImp,和TerminalUtill两个类。reportsEntryServiceUtil则实现方法以提供action使用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在jsp和action中使用的类是reportsEntryServiceUtil和ReportsEntryI。待续</p>
          <br/>
          <span style="color:red;">
            <a href="http://hatlar.javaeye.com/blog/191011#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 12:39:00 +0800</pubDate>
        <link>http://hatlar.javaeye.com/blog/191011</link>
        <guid>http://hatlar.javaeye.com/blog/191011</guid>
      </item>
      <item>
        <title>liferay中service.xml 元素解释</title>
        <author>hatlar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hatlar.javaeye.com">hatlar</a>&nbsp;
          链接：<a href="http://hatlar.javaeye.com/blog/190088" style="color:red;">http://hatlar.javaeye.com/blog/190088</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&lt;!--<br />This is the DTD for the Service Builder parameters for Liferay Portal.</p>
<p>&lt;!DOCTYPE service-builder PUBLIC<br />&nbsp;"-//Liferay//DTD Service Builder 4.4.0//EN"<br />&nbsp;"<a href="http://www.liferay.com/dtd/liferay-service-builder_4_4_0.dtd">http://www.liferay.com/dtd/liferay-service-builder_4_4_0.dtd</a>"&gt;<br />--&gt;</p>
<p>&lt;!--<br />The service-builder element is the root of the deployment descriptor for<br />a Service Builder descriptor that is used to generate services available to<br />portlets. The Service Builder saves the developer time by generating Spring<br />utilities, SOAP utilities, and Hibernate persistence classes to ease the<br />development of services.<br />--&gt;<br />&lt;!ELEMENT service-builder (namespace, entity+, exceptions?)&gt;</p>
<p>&lt;!--<br />package-path指定生成文件存放的位置。<br />--&gt;<br />&lt;!ATTLIST service-builder<br />&nbsp;package-path CDATA #REQUIRED<br />&gt;</p>
<p>&lt;!--<br />The namespace element must be a unique namespace for this component. Table names<br />will be prepended with this namespace. Generated JSON JavaScript will be scoped<br />to this namespace as well (i.e., Liferay.Service.Test.* if the namespace is<br />Test).<br />namespace 对于每一个实体来说必须是唯一的。<br />--&gt;<br />&lt;!ELEMENT namespace (#PCDATA)&gt;</p>
<p>&lt;!--<br />An entity usually represents a business facade and a table in the database. If<br />an entity does not have any columns, then it only represents a business facade.<br />The Service Builder will always generate an empty business facade POJO if it<br />does not exist. Upon subsequent generations, the Service Builder will check to<br />see if the business facade already exists. If it exists and has additional<br />methods, then the Service Builder will also update the SOAP wrappers.</p>
<p>If an entity does have columns, then the value object, the POJO class that<br />is mapped to the database, and other persistence utilities are also generated<br />based on the order and finder elements.<br />--&gt;<br />&lt;!ELEMENT entity (column*, order?, finder*, reference*, tx-required*)&gt;</p>
<p>&lt;!--<br />name指定了实体的名字<br />table指定了实体在数据库中对应的表的名字，如果没有设置侧表的名字和实体的名字是相同的。<br />如果uuid设置成true,将自动添加一列，实体将自动生成基于uuid的查询和删除方法.默认值false.<br />如果local-service设置成true,将自动生成本地接口，默认值false<br />如果remote-service设置成true,将自动生成远程接口。默认值false;<br />persistence-class设置自己的持久类的名字。这个类必须实现生成的持久类接口或继承生成的持久类。它允许你在不修改生成的持久类的情况下，覆盖默认的方法<br />你能用自己的数据源和session Factory生成自己的类。指明spring的配置文件，在portal配置文件中，载入自己的spring文件,文件中必须定义了数据源和sessionFactory.然后设置data-source和 session Factory的值。<br />data-source 指定持久类使用的数据源，默认的时候，数据源是portal的数据源，数据源被session-Factory使用。<br />在数据源到spring的文件中可以看到。<br />tx-manager 指定 spring 使用的transaction manager.默认的是Spring和hibernate transaction mannager是liferay自带的.<br />--&gt;<br />&lt;!ATTLIST entity<br />&nbsp;name CDATA #REQUIRED<br />&nbsp;table CDATA #IMPLIED<br />&nbsp;uuid CDATA #IMPLIED<br />&nbsp;local-service CDATA #IMPLIED<br />&nbsp;remote-service CDATA #IMPLIED<br />&nbsp;persistence-class CDATA #IMPLIED<br />&nbsp;data-source CDATA #IMPLIED<br />&nbsp;session-factory CDATA #IMPLIED<br />&nbsp;tx-manager CDATA #IMPLIED<br />&gt;<br />&lt;!--<br />column 对应数据库中的某个列。<br />--&gt;<br />&lt;!ELEMENT column (#PCDATA)&gt;</p>
<p>&lt;!--<br />name指定在实体中的getter和setter的方法。<br />type指定列的数据类型，字符串，逻辑值，或整型。<br />db-name指定对应的数据库中列的名字。<br />For example:</p>
<p>&lt;column name="companyId" db-name="companyId" type="String" /&gt;<br />如何primary的值是true，则此列是关键字段的一部分，如果不止一个列被设置成true，则产生一个符合主键<br />如果entity和mapping-key属性被指定而没有mapping-table，那么将建立一个一对多的关系。<br />For example:</p>
<p>&lt;column<br />&nbsp;name="shoppingItemPrices"<br />&nbsp;type="Collection"<br />&nbsp;entity="ShoppingItemPrice"<br />&nbsp;mapping-key="itemId"<br />/&gt;</p>
<p>如果entity和mapping-table的值被指定而mapping-kay没有指定，将建立多对多的映射关系。<br />For example:</p>
<p>&lt;column<br />&nbsp;name="roles"<br />&nbsp;type="Collection"<br />&nbsp;entity="Role"<br />&nbsp;mapping-table="Groups_Roles"<br />/&gt;</p>
<p>id-type和id-param的用来创建一个自动生成，自动增加的关键字，当向数据库中插入一条记录时，关键字自动增加。<br />根据不同类型的数据库，可以用四种不同的方法来实现。所有的情况，模型实体的值应该是null，hibernate自动用自增的关键字代替null.如果id-type没有使用，关键字自动生成但不自动增加。 <br />一、用一个类来生成关键字</p>
<p>For example:</p>
<p>&lt;column <br />&nbsp;name="id" <br />&nbsp;type="Integer" <br />&nbsp;primary="true" <br />&nbsp;id-type="class" <br />&nbsp;id-param="com.liferay.counter.service.persistence.IDGenerator" <br />/&gt;</p>
<p>二、当没有另外的进程插入数据到同一个数据库的时，自动生成唯一的标识符。这种方法不应该用到群集环境中，但是适用所有的数据库<br />For example:</p>
<p>&lt;column <br />&nbsp;name="id" <br />&nbsp;type="Integer" <br />&nbsp;primary="true" <br />&nbsp;id-type="increment" <br />/&gt;<br />三、使用一个列标识符生成一个关键字<br />For example:</p>
<p>&lt;column <br />&nbsp;name="id" <br />&nbsp;type="Integer" <br />&nbsp;primary="true" <br />&nbsp;id-type="identity" <br />/&gt;<br />.<br />无论什么时候插入，实体生成一个标识列（自动生成的关键字）<br />The fourth implementation uses a sequence to generate a primary key.<br />四、用一个序列产生一个关键字。<br />For example:</p>
<p>&lt;column <br />&nbsp;name="id" <br />&nbsp;type="Integer" <br />&nbsp;primary="true" <br />&nbsp;id-type="sequence" <br />&nbsp;id-param="id_sequence" <br />/&gt;<br />用这种实现方法，产生一个序列的SQL命令基于id-param的值（存储在/sql/sequences.sql).这个序列是自动生成唯一标别。仅DB2,ORACLE ,POSTGRESQL 和SAPDB能使用。<br />convert-null指定，如果数值为null是否自动转化成一个非空的值。当实体涉及到一个只读的表或视图的时候，特别有用，hibernate就不会进行没必要的更新。默认值是true.<br />--&gt;<br />&lt;!ATTLIST column<br />&nbsp;name CDATA #REQUIRED<br />&nbsp;db-name CDATA #IMPLIED<br />&nbsp;type CDATA #REQUIRED<br />&nbsp;primary CDATA #IMPLIED<br />&nbsp;entity CDATA #IMPLIED<br />&nbsp;mapping-key CDATA #IMPLIED<br />&nbsp;mapping-table CDATA #IMPLIED<br />&nbsp;id-type CDATA #IMPLIED<br />&nbsp;id-param CDATA #IMPLIED<br />&nbsp;convert-null CDATA #IMPLIED<br />&gt;</p>
<p>&lt;!--<br />order指定索引数据库时候的默认排列顺序。<br />--&gt;<br />&lt;!ELEMENT order (order-column+)&gt;</p>
<p>&lt;!--<br />by用来设定排列的顺序是asc(升序）或desc（降序）<br />--&gt;<br />&lt;!ATTLIST order<br />&nbsp;by CDATA #IMPLIED<br />&gt;</p>
<p>&lt;!--<br />order-column根据指定的列来进行排序。<br />--&gt;<br />&lt;!ELEMENT order-column (#PCDATA)&gt;</p>
<p>&lt;!--</p>
<p>For example:</p>
<p>&lt;order by="asc"&gt;<br />&nbsp;&lt;order-column name="parentLayoutId" /&gt;<br />&nbsp;&lt;order-column name="priority" /&gt;<br />&lt;/order&gt;<br />For example:</p>
<p>&lt;order by="asc"&gt;<br />&nbsp;&lt;order-column name="name" case-sensitive="false" /&gt;<br />&lt;/order&gt;</p>
<p>The above settings will order by name and will not be case sensitive.</p>
<p>For example:</p>
<p>&lt;order&gt;<br />&nbsp;&lt;order-column name="articleId" order-by="asc" /&gt;<br />&nbsp;&lt;order-column name="version" order-by="desc" /&gt;<br />&lt;/order&gt;</p>
<p>--&gt;<br />&lt;!ATTLIST order-column<br />&nbsp;name CDATA #REQUIRED<br />&nbsp;case-sensitive CDATA #IMPLIED<br />&nbsp;order-by CDATA #IMPLIED<br />&gt;</p>
<p>&lt;!--<br />finder 生成一个查找的方法。<br />--&gt;<br />&lt;!ELEMENT finder (finder-column+)&gt;</p>
<p>&lt;!--<br />--&gt;<br />&lt;!ATTLIST finder<br />&nbsp;name CDATA #REQUIRED<br />&nbsp;return-type CDATA #REQUIRED<br />&nbsp;where CDATA #IMPLIED<br />&nbsp;db-index CDATA #IMPLIED<br />&gt;</p>
<p>&lt;!--<br />finder-column指定按照那一列来查找。<br />--&gt;<br />&lt;!ELEMENT finder-column (#PCDATA)&gt;</p>
<p>&lt;!--<br />name指定查找的方法名。<br />For example:</p>
<p>&lt;finder name="CompanyId" return-type="Collection"&gt;<br />&nbsp;&lt;finder-column name="companyId" /&gt;<br />&lt;/finder&gt;</p>
<p>The above settings will create a finder with the name findByCompanyId that will<br />return a Collection and require a given companyId. It will also generate<br />several more findByCompanyId methods that take in pagination fields (int begin,<br />int end) and more sorting options. The easiest way to understand this is to<br />look at a generated PersistenceImpl class. The Service Builder will also<br />generate removeByCompanyId and countByCompanyId.</p>
<p>See com.liferay.portal.service.persistence.LayoutPersistenceImpl for a good<br />example.</p>
<p>The attribute comparator takes in the values =, !=, &lt;, &lt;=, &gt;, &gt;=, or LIKE and is<br />used to compare this column.</p>
<p>The attribute case-sensitive is a boolean value and is only used if the column<br />is a String value.<br />--&gt;<br />&lt;!ATTLIST finder-column<br />&nbsp;name CDATA #REQUIRED<br />&nbsp;db-name CDATA #IMPLIED<br />&nbsp;case-sensitive CDATA #IMPLIED<br />&nbsp;comparator CDATA #IMPLIED<br />&gt;</p>
<p>&lt;!--<br />The reference element allows you to inject services from another service.xml<br />within the same class loader. For example, if you inject the Resource entity,<br />then you'll be able to reference the Resource services from your service<br />implementation via the methods getResourceLocalService and getResourceService.<br />You'll also be able to reference the Resource services via the variables<br />resourceLocalService and resourceService.<br />--&gt;<br />&lt;!ELEMENT reference (#PCDATA)&gt;</p>
<p>&lt;!--<br />See the comments in reference element.<br />--&gt;<br />&lt;!ATTLIST reference<br />&nbsp;package-path CDATA #IMPLIED<br />&nbsp;entity CDATA #IMPLIED<br />&gt;</p>
<p>&lt;!--<br />The tx-required element has a text value that will be used to match method names<br />that require transactions. By default, the methods: add*, check*, clear*,<br />delete*, set*, and update* require propagation of transactions. All other<br />methods support transactions but are assumed to be read only. If you want<br />additional methods to fall under transactions, add the method name to this<br />element.<br />--&gt;<br />&lt;!ELEMENT tx-required (#PCDATA)&gt;</p>
<p>&lt;!--<br />The exceptions element contain a list of generated exceptions. This doesn't save<br />a lot of typing, but can still be helpful.<br />--&gt;<br />&lt;!ELEMENT exceptions (exception*)&gt;</p>
<p>&lt;!--<br />See the comments in exceptions element.<br />--&gt;<br />&lt;!ELEMENT exception (#PCDATA)&gt;</p>
<p>还没有翻译完,是service.xml使用的dtd文件</p>
          <br/>
          <span style="color:red;">
            <a href="http://hatlar.javaeye.com/blog/190088#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 May 2008 11:40:08 +0800</pubDate>
        <link>http://hatlar.javaeye.com/blog/190088</link>
        <guid>http://hatlar.javaeye.com/blog/190088</guid>
      </item>
      <item>
        <title>liferay ex下开发初探</title>
        <author>hatlar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hatlar.javaeye.com">hatlar</a>&nbsp;
          链接：<a href="http://hatlar.javaeye.com/blog/188141" style="color:red;">http://hatlar.javaeye.com/blog/188141</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>别人都说liferay在ex 下开发比较好,以后升级不会破坏liferay的完整性.也许是这样,那就研究以下好了.我算知道了---研究原代码是最好的所以就从研究原代码开始了.首先一定要找到对应的版本啊,比如我刚开始的时候,看的是liferay4.0.0的src,主要的也看懂了,但是有的地方是一团雾水,最后看4.2.2的src 才算明白了怎么会事.不要看的还算可以.在ex-imp的目录下有一个service.xml 文件主要是用来生成持久类和对持久类的操作,刚开始的时候把&nbsp;PersistenceImpl天真的认为是hibernate中的持久类(实体),但是事实它是对实体类的基本操作,如果懂ant 的话看ext-impl下的build.xml 文件就会更容易了.其中&lt;build-service&quot;&gt;是用来生成持久类和相关的操作类的.其中参数</p>
<p>&lt;jvmarg value=&quot;-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.input.file=${service.file}&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.hbm.file=classes/META-INF/ext-hbm.xml&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.model.hints.file=classes/META-INF/ext-model-hints.xml&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.spring.file=classes/META-INF/ext-spring.xml&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.api.dir=${project.dir}/ext-service/src&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.impl.dir=src&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.json.file=${project.dir}/ext-web/docroot/html/js/liferay/ext_service_unpacked.js&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.remoting.file=${project.dir}/ext-web/docroot/WEB-INF/remoting-servlet-ext.xml&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.sql.dir=../sql&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.sql.file=portal-tables.sql&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.base.model.impl.package=com.liferay.portal.model.impl&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.base.persistence.package=com.liferay.portal.service.persistence&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.bean.locator.util.package=com.liferay.portal.kernel.bean&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.principal.bean.package=com.liferay.portal.service.impl&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.props.util.package=com.liferay.portal.util&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.spring.hibernate.package=com.liferay.portal.spring.hibernate&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;jvmarg value=&quot;-Dservice.spring.util.package=com.liferay.portal.spring.util&quot; /&gt;</p>
<p>正好是和com.liferay.portal.tools.servicebuilder.ServiceBuilder类中main(string[] args)中args[]中的参数是一一对应的的</p>
          <br/>
          <span style="color:red;">
            <a href="http://hatlar.javaeye.com/blog/188141#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Apr 2008 18:17:15 +0800</pubDate>
        <link>http://hatlar.javaeye.com/blog/188141</link>
        <guid>http://hatlar.javaeye.com/blog/188141</guid>
      </item>
      <item>
        <title>liferay遇到的问题</title>
        <author>hatlar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hatlar.javaeye.com">hatlar</a>&nbsp;
          链接：<a href="http://hatlar.javaeye.com/blog/188059" style="color:red;">http://hatlar.javaeye.com/blog/188059</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 研究liferay快一个月了,取得的成果不大.不过发现的问题不少,自己都没有想出方法来解决.比如liferay如何设置默认的语言,当游客浏览的时候显示中文,还有如何修改liferay的logo,等等很多的问题.不过已经解决了一些.随后会总结自己遇到的问题和解决方法.希望有机会得到高手的指教.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;"><span style="font-family: Times New Roman;"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;"><span style="font-size: small;">1、</span><span style="font-family: &quot;Times New Roman&quot;;">&nbsp; </span></span></span><span lang="EN-US"><span style="font-size: small;">liferay</span></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';"><span style="font-size: small;">的中文默认。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">其实没有太大的必要，因为</span><span lang="EN-US"><span style="font-family: Times New Roman;">liferay</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的内容编辑功能不能同时对内容的中英同时编写以及转换，因为切换的时候是标题的中英文转换，而内容没有转换，所以直接把它写成中文就可以了。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;"><span style="font-family: Times New Roman;"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman';"><span style="mso-list: Ignore;"><span style="font-size: small;">2、</span><span style="font-family: &quot;Times New Roman&quot;;">&nbsp; </span></span></span><span lang="EN-US"><span style="font-size: small;">liferay</span></span></span><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的</span><span lang="EN-US"><span style="font-family: Times New Roman;">logo</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">修改问题，</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt;"><span style="font-size: small;"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">我不知道大家用的是哪个版本，但是我用的是</span><span lang="EN-US"><span style="font-family: Times New Roman;">liferay 4.4.2.</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">。</span><span lang="EN-US"><span style="font-family: Times New Roman;">liferay </span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">有默认的外观和风格。如果用默认的外观和风格是不能修改</span><span lang="EN-US"><span style="font-family: Times New Roman;">logo</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的。使用非默认的外观和风格，就可以通过修改</span><span lang="EN-US"><span style="font-family: Times New Roman;">adminstor</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">里面的设置就可以修改</span><span lang="EN-US"><span style="font-family: Times New Roman;">logo</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">图标。默认的使用的是</span><span lang="EN-US"><span style="font-family: Times New Roman;">root </span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">外的</span><span lang="EN-US"><span style="font-family: Times New Roman;">liferay-jedi-theme</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">文件夹，而自己选择的</span><span style="font-family: Times New Roman;"> <span lang="EN-US">classic</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">和</span><span lang="EN-US"><span style="font-family: Times New Roman;">brochure </span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">在</span><span lang="EN-US"><span style="font-family: Times New Roman;">root</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">的目录里面。同时与</span><span lang="EN-US"><span style="font-family: Times New Roman;">liferay-jedi-theme</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">相比，</span><span lang="EN-US"><span style="font-family: Times New Roman;">images/common/</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">中缺少了</span><span lang="EN-US"><span style="font-family: Times New Roman;">logo.png.</span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman';">也许是这个原因产生的以上结果，我也没有弄清楚。</span></span></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://hatlar.javaeye.com/blog/188059#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Apr 2008 14:51:53 +0800</pubDate>
        <link>http://hatlar.javaeye.com/blog/188059</link>
        <guid>http://hatlar.javaeye.com/blog/188059</guid>
      </item>
  </channel>
</rss>