??xml version="1.0" encoding="utf-8" standalone="yes"?>色狠狠久久av综合,亚洲va天堂va国产va久,欧美另类网站http://www.aygfsteel.com/realzar/category/7332.html皇家撒拉哥萨zh-cnThu, 01 Mar 2007 18:25:50 GMTThu, 01 Mar 2007 18:25:50 GMT60[转脓(chung)]Tapestry 心得http://www.aygfsteel.com/realzar/archive/2006/03/26/37418.html开源爱好?/dc:creator>开源爱好?/author>Sat, 25 Mar 2006 16:29:00 GMThttp://www.aygfsteel.com/realzar/archive/2006/03/26/37418.htmlhttp://www.aygfsteel.com/realzar/comments/37418.htmlhttp://www.aygfsteel.com/realzar/archive/2006/03/26/37418.html#Feedback0http://www.aygfsteel.com/realzar/comments/commentRss/37418.htmlhttp://www.aygfsteel.com/realzar/services/trackbacks/37418.html  传统的jsp设计Q或者说servlet设计是一U根据jsp和servlet不同的优点设计的mvc模式。对于jspQ显C更加便P更加灉|Q所以更多地用于面昄Q而servlet则更多的H现了它对于后台的强大控制力Q所以更多地被用于控制器Q也是controller。mvc的设计模式是Q无Z么样的请求,都需要通过对于url的模p匹配被定位到第一U或者顶U控制器Q再通过控制器对于所传递的hq行解析分析后,重定向到正确的处理类中,也就是说Q我们对于整个应用需要些大于总页面个数的javacL完成所规定功能。这在一定程度上费了资源和开发时间。当Ӟ在Y件工E学中,本就提出了几U不同的解决Ҏ(gu)Qmvc模式可以使我们应用更加清晰化Q更加可l护化?br />  当然Q抽象地_(d)tapestry在设计中完全没有了控制器的概c(din)当然这也是个h的观炏V开发过E中Q我只是设计Q在用户使用我所写的面的时候会(x)出现多少U状况,然后设计相应的页面。这样就更加cM我们在c中的开发,瀑布式开发模式。还是做个例子比较好Q对不对Q?br />暂时不给大家.htm?page文g了,不然大家?x)越来越晕的Q只l大家讲解一?java文g
public abstract void SubjectList extends GbsBasePage
{
     public abstract Subject getSubject();
     public abstract void setSubject();

     public abstract Subject getParentSubject();
     public abstract void setSubject();

     public IsubjectService getIsubjectService()
     {return (IsubjectService)getService("subjectService");}

     public List getSubjectList()
     {
           List list=new ArrayList(getSubject().getSubjects());
           return list;
     }
    
      public void addSubject(IRequestCycle cycle)
      {
           AddSubject addSubject=(AddSubject)cycle.getPage("add_subject");
          
           addSubject.setParentSubject(getSubject().getParentSubject());
           forward(cycle,"add_subject");
      }

      public void defineSubSubject(IRequestCycle cycle)
      {
          SubjectList subjectList=(SubjectList)cycle.getPage("subject_list");
          subjectList.setParentSubject(getSubject);
          forward(cycle,"subject_list");
      }
}
     朋友们可能会(x)看得很迷p,对吧Q其实这是tapestry的优点了。如果你希望把一些东西绑定在面上的话,那么我根本就不需要在javacM处理他们Q只需要将实体cd.page中声明一下,例如Q?br /><property-specification name="subject" type="com.tapestry.Subject"/>
     然后在javacM抽象的声明他们,tapestry׃(x)自动你所需要绑定的属性绑定在实体上,处理的时候只需要调用就可以了?br />   那么Q这个IService又是怎么回事儿呢Q其实我们在面之间q行数据或者实体传递的时候,Z提高速度Q或者提高效率,或者提高安全性,我们都可以通过传递id的方式进行,那么通过spring的serviceҎ(gu)Q我们就可以快速的扑ֈq个实体Q例如:(x)
Subject subject=getSubjectService().Load(getSubject().getID());
     同时Q我们这个页面所需要的控g也需要我们传递相应的参数来显C我们所需要的效果Q这是Z么要有getSubjectList()q个Ҏ(gu)了。在我们使用foreach控g或者actionTable控g的时候,都需要我们传递一个list用来昄Q那么这个list来自这个方法?br />    我们可以dsubjectq个实体Q那么tapestry׃(x)自动调用addSubject()q个Ҏ(gu)来得页面进入添加页面。上一ơ曾l说q,tapestry中所有的面都是一个javac,所以,相应的负g变得理所当然了。addSubject.setParentSubject(getSubject().getParentSubject());
     最后,我们要把所有的h和相应一起发l正的面forward(cycle,"add_subject");
同时Q我们还可以在自己和自己中不停的跌{。这时我们就可以无限的定义我们的?wi)型l构了,因ؓ(f)我们只需要给自己传递不同的参数可以了?br />

]]>
表现层框架Struts/Tapestry/JSF比较http://www.aygfsteel.com/realzar/archive/2006/02/28/32798.html开源爱好?/dc:creator>开源爱好?/author>Tue, 28 Feb 2006 01:42:00 GMThttp://www.aygfsteel.com/realzar/archive/2006/02/28/32798.htmlhttp://www.aygfsteel.com/realzar/comments/32798.htmlhttp://www.aygfsteel.com/realzar/archive/2006/02/28/32798.html#Feedback1http://www.aygfsteel.com/realzar/comments/commentRss/32798.htmlhttp://www.aygfsteel.com/realzar/services/trackbacks/32798.html  其实QJSF和Tapestry也ƈ不是那种头碰头的相同竞争性技术,两者还是各有侧重点的,不过比较l微Q但是这U细微点在实C个大工程时可能带来不同的感受和变化?/P>

  首先Q我们从一个高度来抽象一下表现层框架应有的技术架构,下图可以说所有表现层框架技术都必须实现的功能架构图Q?/P>

ti7m48370n10.jpg

  当然Q我们不必废话罗嗦MVC模式QMVC模式是基准模式,现在框架技术已l不必再拼是否是MVC模式了?在上图MVC模式基础上,一个表现层框架无外乎要实现图中的三个功能:(x)

  1.在当前页面能够显CZ个组件对象的内容Q而不是象UJSP那样Q需要在Jsp面写入“调用对象方法”的Java代码?/P>

  2.当用h下页面的提交按扭或链接后Q事件发生,q时应该触发服务器端q将当前面的参数提交给服务器。这U机制表现在Form表单提交和有参数的链?lt;a href=""></a>

  3.从一个页面视囄接蟩转到另外一个页面视图,单纯的导航作用?/P>

  我们通过下表来比较这 三种框架在实C囑֐个功能时技术细节,从而得Z们的异同点和偏重炏V?/P>
  Struts Tapestry3.0 JSF
在View昄的组件要?/TD>

lg必须l承ActionForm

分显式调用和隐式调用
lg必须l承BaseComponent
普通POJO
无需l承
Managed Bean
lg在View昄_度 View面只能昄与表单对应的ActionFormQ配|中Action ActionForm 面一般只?:1:1关系?/TD> 可将lg嵌入面M一行,对用组件数量无限制?/TD> 同Tapestry
面分区tiles 使用Tiles标签库实玎ͼ需要另外tiles-def.xml配置文g lg有自q视图面Q通过调用lg即直接实现多个页面组合。强大自然的面l合是其特点?/TD> 通过lg+标签库实现Subview,但如需重用Layout,q要l合Tiles.
面跌{ 使用标签库html:link中写明目标URLQURL名称需要对照配|文件的path命名,与组件Action耦合?/TD> URL名称是目标的lg名称Q不涉及(qing)URL和\径等操作Q方便稳固?/TD> cMStrutsQ也需要在配置文g中查?与组件分R?/TD>
参数传?/TD> 使用html:link时传递参数超q一个以上处理麻烦?/TD> 直接调用lgQ直接赋予参敎ͼ没有参数个数限制 参数分离传递给lg
事g触发 通过表单提交submitȀz,不能l化到表单里字段?/TD> 能够l于表单每个字段贴一个事Ӟ事glg必须实现PageListener接口 同TapestryQ事件组件必d?fn)ActionListener 接口

  Strutslg~程模型

  Struts实现lg~程时有一些复杂:(x)l常Z个页面中需要引入多个组件而头|因ؓ(f)Struts中无法直接引入多个组Ӟ必须l一些圈?

  一般分两种情况Q如果同一个Action可以对付这些组Ӟ那么在这U情况下有两个办法:(x)

  1.这多个lg装入一个ActionForm中,如?SPAN class=unnamed3>MapForm{机Ӟ

  2.手工多个组件装入request/session{scope中,然后Ҏ(gu)其名U在jsp中获得?/P>

  q两个方法都有缺点:(x) W一U办法经怸个ActionForm弄得面目全非Q变成一个大杂烩Q违反了OO分派装的原则;W?U办法其实又回到jsp~程Q?/P>

  W二U情况,如果q些lg必须有预先由不同的Action来处理,每个lg必须l过Action -->ActionForm程Q在q种情况下有两种办法Q?/P>

  1.使用Tiles, 不同程输出到同一个页面的不同区域。是一Uƈ行处理方式?/P>

  2. 对多个流E首q,W一Action forwardl果是第二个ActionQ最后输Z个JspQ在q个jsp中就可以使用前面多个程的多个ActionForm了,q属于串行方式?/P>

  Strutslg模型~点

  Strutslg~程必须限定在Action/ActionForm/JSPq三个框框中做文章,隑ֺ相对比较大,而Tapestry/JSF则没有太多这些技术框框限Ӟ两者在lg~程斚w更让~程者自׃些,方便一些,q也是组件型框架的优势吧?/P>

  Struts标签?/STRONG>

  在Struts中,l常需要用标{ֺ来显C组件ActionForm中内容,q就涉及(qing)C个结合的问题Q标{ֺ是别人写的,参考Struts的标{ֺ用法Q而组件是自己的,隑ֺ和麻烦就体现在这个结合点上?/P>

  JSF基本思\和Struts差不多,只不q换了不同标{ֺQ也需要标{ֺ+lg的结合思考,不过因ؓ(f)lgq里是通用lgQ没有什么限Ӟ所以这hStruts要轻松一些?/P>

  Tapestry使用了组件库概念替代了标{ֺQ没有标{ֺ概念Q这样就没有标签库和自己的组仉要结合的问题Q都是组件的使用Q组件中分Tapestry标准lg和自己定义的lgQ这也是接触了Jsp体系的h学习(fn)Tapestry面(f)的一个思\转换?/P>

  具体以页面蟩转ؓ(f)例子Q页面蟩转是靠链?lt;a href="目标"></a> 实现Q链接是面l常使用的元素?/P>

  Struts提供的html:link在频J用就特别不方便,其在传递多个参数时Q其中h(hun)tml:link的page|是蟩转对斚w面或Action的pathQ这个path一般需要到struts-config.xml查找Action的相应path,一旦配|文件pathg改,涉及(qing)到这个所有相关页面都要修攏V?/P>

  JSF链接概念划分两个方面:(x)D性质和事件激z,在导航方面还是需要到配置faces-config查询Navigation的from-outcome的倹{?/P>

  ׃Tapestry没有标签库概念,只有lg或页面两个概念,因此Q链接蟩转目标要么是lgQ要么是面Q简z简单,它没有多余的path概念Q就是组件名Q也是对象名称Q组件名U和path名称合二Z?/P>

  ȝ

  JSF在很大程度上cMStrutsQ而不是类似TapestryQ可以说是一UStruts 2.0Q都是采取标{ֺ+lg的Ş式,只是JSF的组件概忉|有象Struts那样必须l承ActionForm的限ӞJSF在事件粒度上要细腻,不象Struts那样Q一个表单一个事ӞJSF可以l化到表单中的每个字D上?/P>

  JSF只有在组件和事g机制q个概念上类似TapestryQ但是不似Tapestry那样是一个完全组件的框架Q所以,如果你做一个对面要求灉|度相当高的系l,选用Tapestry是第一考虑?/P>

  Struts/JSF则适合在一般的数据面录入的系l中Q对于Struts和JSF的选用Q我目前个h观点是:(x)如果你是一个新的系l,可以直接从JSF开始;如果你已l用StrutsQ不必{换,如果需要切换,可以JSF和Tapestry一赯虑?/P>

  另外QJSF/Tapestry不只是支持HtmlQ也支持多种客户端语a如WML或XUI{?/P>

  q三者之间关p:(x)如果说Struts是左z;那Tapestry则是xQ而JSF则是中间z,中庸M是SUN联盟的一贯策略?/P>

  当然Q你也可以发表你在实践中q三者Q何一个的使用感受Q以使得后来者有一个比?/P>

]]>
Tapestry 4.0 新特?9?日修? http://www.aygfsteel.com/realzar/archive/2006/02/10/30075.html开源爱好?/dc:creator>开源爱好?/author>Thu, 09 Feb 2006 17:11:00 GMThttp://www.aygfsteel.com/realzar/archive/2006/02/10/30075.htmlhttp://www.aygfsteel.com/realzar/comments/30075.htmlhttp://www.aygfsteel.com/realzar/archive/2006/02/10/30075.html#Feedback0http://www.aygfsteel.com/realzar/comments/commentRss/30075.htmlhttp://www.aygfsteel.com/realzar/services/trackbacks/30075.html参考:(x)http://jakarta.apache.org/tapestry/current/UsersGuide
基本上是理解性翻译,英文好的可以直接ȝ此guideQ我只是做了W记Q然后放到这里希望能对大家有所帮助?
新特性我也只是了解,没有具体应用(很想?IMG alt="Very Happy" src="http://forum.hibernate.org.cn/images/smiles/icon_biggrin.gif" border=0>)Q有理解错误的地方,希望大家原谅?

Tapestry4新特?一)Qdefault binding types

default binding types(默认的绑定类?
每一个组件的参数都可以定义默认的l定cdQ如果一个绑定的参数没有前缀Q将使用默认的绑定类型?
下面的代码实现同L(fng)功能:


<ul element="ul" jwcid="@Foreach" source="ognl:items" value="ognl:item"> <li><span jwcid="@Insert" value="ognl:item.name"/> </ul>

<ul element="ul" jwcid="@Foreach" source="items" value="item"> <li><span jwcid="@Insert" value="item.name"/> </ul>

加粗的部分显C前后的变化Q之所以可以这样定义,是因为Insertlg定义value参数的默认绑定类型ؓ(f)ongl.
注意Q默认的l定参数L可以被显式的l定声明覆盖掉?
如果没有定义默认的绑定参敎ͼ那么在html模板中定义的默认l定参数为literalQ页面定义文仉的默认绑定参Cؓ(f)ognl
修订Q?

从beta4版本开始,此特性已l被删除Q?

Beta4的change logQ?

Remove default-binding attribute from element(HLS)

但是“如果没有定义默认的l定参数Q那么在html模板中定义的默认l定参数为literalQ页面定义文仉的默认绑定参Cؓ(f)ognl”这个效果经试依然存在?

怀念:(x)

此段文字在beta3中存在,beta4后就删掉了!

Binding Type Defaults
Tapestry 4.0 introduces a new idea: default binding types. Each component parameter may define a default binding type (using the default-binding attribute of the <parameter> element).

If a binding reference does not have a prefix, the default binding type is used.

Because of this, the following two snippets are identical:

<ul element="ul" jwcid="@Foreach" source="ognl:items" value="ognl:item">
<li><span jwcid="@Insert" value="ognl:item.name"/>
</ul>
<ul element="ul" jwcid="@Foreach" source="items" value="item">
<li><span jwcid="@Insert" value="item.name"/>
</ul>
This works because the Insert component defines the default-binding for the value parameter to be "ognl". Likewise, the source and value parameters of the Foreach component are defined to be "ognl". However, the element parameter of the Foreach component has a binding type of "literal".

This is a decision made by the component author. If a particular parameter is (nearly) always bound using a particular binding type, then a default-binding may be set. The default binding can always be overriden with an explicit binding type prefix.

What about parameters that don't define a default binding type? The answer to this question (which includes all informal parameters), is that it depends on whether the parameter is bound in an HTML template, or in a page or component specification. In an HTML template, the default binding type is "literal". In a specification, the default binding type is "ognl".

Tapestry4新特??Qlistener method

如果使用qtapestry的应该知道listenerҎ(gu)?.0以前版本中的定义Q如public void formSubmit(IRequestCycle cycle)Q方法必L一个IRequestCycle参数。参数的取得方式如下QObject[] parameters = cycle.getServiceParameters();
?.0中参数的取得可以通过以下两种方式Q?

1、调用IRequestCycle.getListenerParameters()Ҏ(gu),需要传入IRequestCycle实例作ؓ(f)参数?
2、按照参数的声明序依次定义为listenerҎ(gu)的参数?
W二U方法比较符合Y件的设计思维Q而且参数的类型在传入后保存,而不是想象中的统一Stringcd?
例如Q?
<a jwcid="@DirectLink" listener="doClick" parameters="{ objectId, index }"> . . . </a>
其中objectId为StringcdQindex为intQ声明中使用了默认的参数l定cd?
对应的方法声明如?
public void doClick(String objectId, int index)
{ . . . }
此ؓ(f)W二U方式,可见Ҏ(gu)的定义符合自然习(fn)惯,当然你也可以通过传统的方法,如下所C:(x) public void doClick(IRequestCycle cycle)
{ Object[] parameters = cycle.getListenerParameters();
String objectId = (String)parameters[0];
int index = ((Integer)parameters[1]).intValue(); . . . }
q种方式是ؓ(f)了向后兼容以前的版本Q当然也适用那种参数数目不确定的情况?Tapestry默认搜烦以下的方法声明:(x)

1、public void method(parameters)Q页面的跌{ cycle.activate()如何实现Q)
2、public void method(IRequestCycle cycle, parameters) Q們֐于用此方式Q?
3、public void method()Q无需参数传递和面跌{的情况,估计可能性不大)
4、public void method(IRequestCycle cycle)Q传l方式)
不要试图通过参数的类型来映射listenerҎ(gu)Qtapestry是根据参数的数目来确定方法的?

Tapestry4新特??-Global Property Source(全局的消息属性配|?

消息属性配|听h不是很舒服,暂时q样U呼好了Q消息属性配|也是通称的国际化?
|,通过配置一个properties文g使不同语a的浏览者看到对应语a的版本,一?
的用如下,一个page面Q例如example.page,同目录下放一?
example.properties,?example.html中?lt;span key="key"/>来指定显C|
中文可以使用example_zh_CN.properties来配|。看h挺方便的Q可
tapestry4.0以前的版本的国际化不支持全局的属性配|文Ӟ必须每个面定义
自己的,无法几个面׃nQ但实际开发中Q多面׃n属性配|是很常见的Q?
tapestry4.0中可以通过以下方式获得全局的属性配|文Ӟ(x)
创徏一个跟你的目全局配置文gQ如yourApp.application,此文件在4.0以前?
版本中是必须的,4.0中如果没有必要配|,可以不需要此文g(扯远?,yourApp
是根据你在web.xml定义的,例如
<servlet>
<servlet-name>tapesty4</servlet-name>
<servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
那属性定义文件就应该是tapestry4.properties,q样在此文g中定义一个:(x)test=
试Q在Home.html中?lt; span key="test">test</span>,看到“测试”正显C?

Tapestry4新特??-源代码标注的异常处理

Tapestry本来提供的debug功能十分强大,4.0版本中提供了更加详细的报错机Ӟ可以昄错误的代码,q在报错的地方加亮标注,具体截图L(fng)附g(谁能告诉我怎么多余的照片删除呀)


Tapestry4新特??-Friendly URLs

Tapestry4.0以前版本中的URL一直被人所诟病Q当然现在已l有很多的解x
案,4.0版本中已l对此做了改q,
因ؓ(f)现在的版本需要通过hivemind来配|,所以需要设|hivemind.xml中的一些属
性,具体配置如下Q?
<?xml version="1.0"?>
<module id="tapestry4" version="1.1.0">
<contribution configuration-id="tapestry.url.ServiceEncoders">
<page-service-encoder id="page" extension="html" service="page"/>
<direct-service-encoder id="direct" stateless-extension="direct"
stateful-extension="sdirect"/>
<asset-encoder id="asset" path="/assets/"/>
<extension-encoder id="extension" extension="svc" after="*"/>
</contribution>
</module>

同时web.xml中加入映:(x)
<servlet>
<servlet-name>tapestry4</servlet-name>
<servlet-class> org.apache.tapestry.ApplicationServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>*.direct</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>*.sdirect</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>/assets/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>*.svc</url-pattern>
</servlet-mapping>
如果希望首页的调用不是通过/app来映,可以在web.xml中更改redirectQ?
<filter-name>redirect</filter-name>
<filter-class>org.apache.tapestry.RedirectFilter</filter-class>
<init-param>
<param-name>redirect-path</param-name>
<param-value>/Home.html</param-value>
</init-param>
</filter>
q样键入http://localhost:8080/tapestry4Q系l导航到http://localhost:
8080/tapestry4/Home.html,
d一个Page面例如Test.pageQ在Home.html中加?lt;a href="#"
jwcid="@PageLink" page="Test">test</a>Q?
在生成的Home.html中生成的test的链接地址为:(x)http://localhost:
8080/tapestry4/Test.html

Tapestry4新特??-自动定位面cL?/SPAN>

关于此特性的介绍请参考:(x)http://jakarta.apache.org/tapestry/current/UsersGuide/page-class.html
说明Q?/SPAN>
通俗点说是(zhn)可以不定义.page文g或者定义的.page文g中不指定class 属性,而让服务器自动根?html文g的\径来L对应的类文g?
配置Q?/SPAN>
?application的定义文件中dQ?<meta key="org.apache.tapestry.page-class-packages" value="org.edynasty.pages"/> q样如果在文档根目录下有个Home.html文gQ你可以将Home.java攑ֈ org.edynasty.pages(实际开发中配置为?zhn)自己的包?包中Qtapestry自动Ҏ(gu) Home.hmtl构造org.edynasty.pages.Home来定位页面的cL?当然(zhn)也可以在WEB -INF目录下放一个Home.page,不需要定义class属性,tapestry自动按照上边的原 理定位?
效果Q?/SPAN>
q样(zhn)可以不需要维?page中的class属性,直接Ҏ(gu).html文g来写对应 的类文g。而且可以Ҏ(gu)业务逻辑来定义目录结构,例如?org.edynasty.pages.user定义为user相关的类Q?html也就可以攑ֈuser目录?边,目录l构如下Q?
user/ListUsers.html
user/EditUser.html
course/ListCourses.html
course/EditCourses.html
Home.html

Tapestry4新特??-Application和Session范围对象的?/SPAN>

关于此特性的介绍请参考:(x)http://jakarta.apache.org/tapestry/UsersGuide/state.html
说明Q?/SPAN>
Application和Session范围的概念就不说了,T4以前的版本只可以分别指定一个对象,
以前版本的定义如?
<property name="org.apache.tapestry.visit-class" value="your.package.Visit"/>
<property name="org.apache.tapestry.global-class" value="your.package.Global"/>,
T4中可以指定Q意多的对象,而且默认的visit和global仍然可以使用?

配置Q?/SPAN>在hivemodule.xml的定义文件中dQ?
<contribution configuration-id="tapestry.state.ApplicationObjects">
<state-object name="applicationUser" scope="application">
<create-instance class="org.edynasty.model.User"/>
</state-object>
<state-object name="sessionUser" scope="session">
<create-instance class="org.edynasty.model.User"/>
</state-object>
</contribution>
两个user分别对应Application和Session范围Q在需要用user的page中注入:(x)
<inject property="applicationUser" type="state" object="applicationUser"/>
<inject property="sessionUser" type="state" object="sessionUser"/>Q通过
getter和setterҎ(gu)调用?

效果Q?/SPAN>怎么说呢Q可以不需要在一个visit中定义N多属性,因ؓ(f)Session的创建需要资源,
只要操作一个visit的属性,需要创建整个visitQ分别定义之后,可以在需要存取时分别创徏?/SPAN>


]]>
վ֩ģ壺 ұ| | ¡| ̶| | | | | Ϫ| ذ| ǿ| | | ɿ| | ذ| Դ| С| | | | | ²| | ¡| | | | | Դ| Ȩ| | ˷| ˴| | | | | | | ˮ|