-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
ʹÓÃÒ»¸öÁÐ±í´´½¨Ò»ÏµÁи´Ñ¡¿ò. ÊôÐÔÅäÖúÍ<ww:select />»ò<ww:radio />ÏàËÆ.ÊôÐÔ
-
-
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×÷Ϊ×Ö¶ÎÖµµÄÊý¾Ý
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- list ·ñ ¿Éµü´úµÄÊý¾ÝÔ´
-
- listKey ·ñ Property of list objects to get field value from
-
- listValue ·ñ Property of list objects to get field content from
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Client-Side Validation.html b/docs/chinese/wikidocs/Client-Side Validation.html
deleted file mode 100644
index 4f953ebf5..000000000
--- a/docs/chinese/wikidocs/Client-Side Validation.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
- WebWork 2 : ¿Í»§¶ËУÑé
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jul 22, 2004 by unkyaku .
-
-
- WebWorkÔÚXWork±ê׼УÑé¿ò¼Ü»ù´¡ÉÏÔö¼ÓÁ˿ͻ§¶ËУÑéÖ§³Ö. Äã¿ÉÒÔÔÚ±íµ¥ÖеÄÔÚ<ww:form >±êÇ©ÖÐÖ¸¶¨validate="true" À´¼¤»î¿Í»§¶ËУÑé:
-
<ww:form name="'test'" action="'javascriptValidation'" validate="true " >
...
</ww:form>
-
Ϊ´ËÄã±ØÐëΪ±íµ¥Ö¸¶¨name .
»¹Ó¦µ±È·ÈÏ<ww:form>±êÇ©ÖÐÉèÖÃÁËÕýÈ·µÄaction ºÍnamespace ÊôÐÔ. ÀýÈç, Èç¹ûÓÐÒ»¸öÃûΪ"submitProfile"µÄ»î¶¯ÔÚÃû¿Õ¼ä"/user"ÖÐ, ±ØÐëʹÓÃÏÂÁдúÂë
-
-
<ww:form namespace="'/user'" action="'submitProfile'" validate="true " >
...
</ww:form>
-
¶øÏÂÃæµÄ´úÂëÖÐ, ±íµ¥¿ÉÒÔÕý³£¹¤×÷, ¿Í»§¶ËУÑéÔò²»ÄÜ:
-
-
<ww:form action="'/user/submitProfile.action'" validate="true " >
...
</ww:form>
-
µ±È», ÕâÐèÒªÄãÒѾÍê³ÉÁËËùÓбê×¼µÄУÑéÅäÖà ¹¤×÷. ¿Í»§¶Ë½ÌÑÐÊÒÓÃÓÚ·þÎñÆ÷¶ËУÑéÏàͬµÄУÑ鹿Ôò. Èç¹û·þÎñÆ÷¶ËУÑé²»¹¤×÷, ¿Í»§¶ËУÑéÒ²²»¹¤×÷.
-
-
-
²¢·ÇÈ«²¿Ð£ÑéÆ÷¶¼Ö§³Ö¿Í»§¶ËУÑé. ½öÓÐʵÏÖScriptValidationAware½Ó¿ÚµÄУÑéÆ÷Ö§³ÖÕâ¸öÌØÐÔ. ¾ßÌåÇé¿ö²Î¼ûWebWorkУÑéÆ÷Áбí
×¢Òâ: ÔÚ
UI±êÇ© ÖеÄ
required ÊôÐÔ²¢²»½øÐÐÈκοͻ§¶ËУÑé.
-
- Éý¼¶¾¯¸æ : ¸ÃÌØÐÔÔÚWebWork 2.1ÒýÈë. Èç¹û´ÓÉϸö°æ±¾Éý¼¶, È·ÈÏvalidators.xml ÖÐʹÓÃÁËÕýÈ·µÄУÑéÆ÷. Äã±ØÐë ʹÓñê×¼XWorkУÑéÆ÷µÄcom.opensymphony.webwork.validators.JavaScriptRequired*Validator °æ±¾.
-
ÈκÎʵÏÖcom.opensymphony.webwork.validators.ScriptValidationAware ½Ó¿ÚµÄУÑéÆ÷¶¼Ö§³Ö¿Í»§¶ËУÑé:
-
public interface ScriptValidationAware extends FieldValidator {
public String validationScript(Map parameters);
}
-
Èç¹û¼¤»îÁ˿ͻ§¶ËУÑé, validationScript ·µ»ØµÄ×Ö·û´®½«ÔÚ¿Í»§¶Ë±í¶ËÌύǰִÐÐ. ÀýÈç, requiredstring УÑéÆ÷°üº¬ÏÂÁдúÂë:
-
public String validationScript(Map parameters) {
String field = (String ) parameters.get("name" );
StringBuffer js = new StringBuffer ();
js.append("value = form.elements['" + field + "'].value;\n" );
js.append("if (value == \" \") {\n" );
js.append("\talert('" + getMessage(null ) + "');\n" );
js.append("\treturn '" + field + "';\n" );
js.append("}\n" );
js.append("\n" );
return js.toString();
}
-
Ŀǰֻ֧³ÖJavaScript.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Combobox tag.html b/docs/chinese/wikidocs/Combobox tag.html
deleted file mode 100644
index 4b63450bf..000000000
--- a/docs/chinese/wikidocs/Combobox tag.html
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
- WebWork 2 : Combobox±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
×éºÏ¿òÊÇÓÉHTMLµÄtextºÍSELECTÊäÈë¿Ø¼þ×éºÏ¶ø³É, ÌṩÁË×éºÏ¿òµÄ¹¦ÄÜ. Ëü¿ÉÒÔͨ¹ýSelect¿Ø¼þ½«Îı¾·ÅÈëTextÖÐ, Ò²¿ÉÒÔÖ±½ÓÔÚText×Ö¶ÎÖÐÊäÈë. ±¾ÀýÖÐ, SELECT¿Ø¼þʹÓÃid=yearÊôÐÔÉú³É. CounterÊÇÒ»¸öµü´úÆ÷(Iterator).
-
<ww:bean name="'webwork.util.Counter'" id="year" >
<ww:param name="'first'" value="text('firstBirthYear')" />
<ww:param name="'last'" value="2000" />
<ww:combobox label="'Birth year'" size="6" maxlength="4" name="'birthYear'" list="#year" />
</ww:bean>
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×÷Ϊ×Ö¶ÎÖµ
-
- list ·ñ ÁбíʹÓõĿɵü´úÊý¾ÝÔ´
-
- size ·ñ HTMLµÄsizeÊôÐÔ
-
- maxlength ·ñ HTMLµÄmaxlengthÊôÐÔ
-
- disabled ·ñ HTMLµÄdisabledÊôÐÔ
-
- tabindex ·ñ HTMLµÄtabindexÊôÐÔ
-
- onkeyup ·ñ HTMLµÄonkeyupÊôÐÔ
-
- onchange ·ñ HTMLµÄonchangeÊôÐÔ
-
- onclick ·ñ HTMLµÄonclickÊôÐÔ
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Common Tags.html b/docs/chinese/wikidocs/Common Tags.html
deleted file mode 100644
index 30f244676..000000000
--- a/docs/chinese/wikidocs/Common Tags.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
- WebWork 2 : ͨÓñêÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 29, 2004 by jcarreira .
-
-
-
-ÉèÖø¸±êÇ©µÄ²ÎÊý. Èç°üº¬ÔÚww:urlºÍww:actionÖÐ.
-
-
<ww:action name="VelocityCounter" id="vc" >
<ww:param name="foo" value="'BAR'" />
</ww:action>
javascript:popUp('<ww:url value="wiki.opensymphony.com/exec/edit" ><ww:param name="name" value="Common Tags" /></ww:url>')
-
-Õª×Ôwebwork.tld:
-
-
<attribute>
<name>name</name>
<required>true </required>
<rtexprvalue>true </rtexprvalue>
</attribute>
<attribute>
<name>value</name>
<required>false </required>
<rtexprvalue>true </rtexprvalue>
</attribute>
-
-ÓÃÓÚ»ñÈ¡½á¹ûÊôÐÔµÄÖµ. Èç¹ûvalueδ¸ø¶¨, ½«Ê¹ÓÃÕ»¶¥Öµ.
-
-
-
<ww:property value="id" default ="#session[OS:'customer'].id" />
-
-Õª×Ôwebwork.tld:
-
-
<attribute>
<name>value</name>
<required>false </required>
<rtexprvalue>true </rtexprvalue>
</attribute>
<attribute>
<name>default </name>
<required>false </required>
<rtexprvalue>true </rtexprvalue>
</attribute>
-
-
-ʹÓÃww:push¿ÉÒÔ½«Ò»¸öֵѹÈëÖµÕ». ÕâÓëww:set(¼ûÏÂÎÄ)ÀàËÆ, Òò´ËÔÚ¾ö¶¨Ê¹ÓÃǰӦµ±¶¼¿´Ò»ÏÂ.
-
-
<ww:push value="counter" >
<ww:property value="count" />
</ww:push>
To make an action available on the stack:
<ww:action name="'SomeAction'" id="sa" />
<ww:push value="#sa" >
foo = <ww:property value="foo" />
</ww:push>
-
-Õª×Ôwebwork.tld:
-
-
<attribute>
<name>value</name>
<required>true </required>
<rtexprvalue>true </rtexprvalue>
</attribute>
-
-
-ʹÓÃww:set±êÇ©, Äã¿ÉÒÔÔÚJSPÖд´½¨Ò»¸ö×Ô¼ºÃüÃû±äÁ¿. ¿ÉÒÔʹÓÃ#variableName µÄÐÎʽÒýÓøñäÁ¿.
-
-
<ww:set name="huba" value="foo.bar" scope="webwork" />
<ww:property value="#huba.otherExpression().baz" />)
-
-Õª×Ôwebwork.tld:
-
-
<info>
Sets the value of an object in the VS to a scope
(page, stack, application, session). If the value
is not given, the top of the stack is used. If the
scope is not given, the default scope of "webwork"
is used.
</info>
<attribute>
<name>name</name>
<required>true </required>
<rtexprvalue>true </rtexprvalue>
</attribute>
<attribute>
<name>value</name>
<required>false </required>
<rtexprvalue>true </rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<required>false </required>
<rtexprvalue>true </rtexprvalue>
</attribute>
-
-
-¸Ã±êÇ©¹¹ÔìÒ»¸ö±àÂëµÄURL. ¸Ã±êÇ©µÄ×î¼ò°æ±¾, <ww:url/>, Êä³ö±¾Ò³ÃæµÄÏà¶ÔURL. ÏÂÃæÊÇÀý×Ó:
- /jsp/cart.jsp?template=%5BLjava.lang.String%3B%40e29f36&id=%5BLjava.lang.String%3B%40429be9
-ÏÂÃæÊǸü³¤µÄÀý×Ó:
-
-
<ww:url value="www.google.com/search" >
<ww:param name="sourceid" value="'navclient'" />
<ww:param name="ie" value="'UTF-8'" />
<ww:param name="oe" value="'UTF-8'" />
<ww:param name="q" value="'webwork'" />
</ww:url>
-
-Êä³ö½á¹ûΪ:
-http://www.google.com/search?sourceid=navclient&ie=UTF-8&oe=UTF-8&q=webwork Õª×Ôwebwork.tld:
-
-
<attribute>
<name>value</name>
<required>false </required>
<rtexprvalue>false </rtexprvalue>
</attribute>
<attribute>
<name>id</name>
<required>false </required>
<rtexprvalue>false </rtexprvalue>
</attribute>
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Comparison to Struts.html b/docs/chinese/wikidocs/Comparison to Struts.html
deleted file mode 100644
index 2ffb52db9..000000000
--- a/docs/chinese/wikidocs/Comparison to Struts.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
- WebWork 2 : ÓëStrutsµÄ±È½Ï
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
-
ÌØÐÔ Struts WebWork 1.x WebWork 2.x Action classes StrutsÒªÇóActionÀà¼Ì³ÐÒ»¸ö³éÏóÀà. ÕâҲ˵Ã÷ÁËStrutsµÄÒ»¸ö³£¼ûÎÊÌâ: Õë¶Ô³éÏóÀà±à³Ì¶ø²»ÊǽӿÚ.Action±ØÐèʵÏÖwebwork.Action½Ó¿Ú. »¹ÓÐÆäËû½Ó¿Ú¿ÉÒÔʵÏÖÆäËû·þÎñ, Èç±£´æ´íÎóÐÅÏ¢, »ñÈ¡±¾µØ»¯Îı¾µÈ. ActionSupportÀàʵÏÖÁËÆäÖеÄһЩ½Ó¿Ú, Ò²¿ÉÒÔÓÃ×÷»ùÀà. WebWorkÈ«²¿Õë¶Ô½Ó¿Ú±à³Ì, ÕâÑùºÜÈÝÒײåÈëÄã×Ô¼ºµÄʵÏÖ. ÓëWebWork 1.xÏàͬ, Action±ØÐèʵÏÖcom.opensymphony.xwork.Action½Ó¿Ú, »¹ÓÐһϵÁнӿÚÓÃÓÚÆäËû·þÎñ. WebWork2ÌṩActionSupport ʵÏÖÕâЩ½Ó¿Ú. Ïß³ÌÄ£ÐÍ StrutsµÄAction±ØÐëÊÇḬ̈߳²È«µÄ, ÒòΪËü½öʹÓÃÒ»¸öʾÀý´¦ÀíÈ«²¿ÇëÇó. ÕâÒ»ÏÞÖÆµ¼ÖÂStrutsµÄActionÖ´Ðйý³ÌÖÐʹÓõÄÈκÎ×ÊÔ´±ØÐëÊÇḬ̈߳²È«µÄ»òͬ²½·ÃÎÊ. WebWorkµÄActionÿһ¸öÇëÇóʹÓÃÒ»¸öʵÀý, Ò»´Î¾Í²»´æÔÚḬ̈߳²È«ÎÊÌâ. ʵ¼ùÖÐ, ÿһ´ÎÇëÇóServletÈÝÆ÷¶¼»áÉú³ÉÐí¶à½«±»¶ªÆúµÄ¶ÔÏó, ¶àÒ»¸ö»ò¼¸¸ö¶ÔÏó²¢Ã»ÓÐÖ¤Ã÷»á´øÀ´ÐÔÄÜÎÊÌâ»òÀ¬»øÊÕ¼¯ÎÊÌâ. ͬÉÏ ¶ÔServletµÄÒÀÀµÐÔ StrutsµÄActionsÒÀÀµÓÚServlets, ÒòΪִÐÐʱʹÓÃ(»ñÈ¡)ÁËServletRequestºÍServletResponse(¶ø²»ÊÇHttpServletRequestºÍHttpServletResponse). °ó¶¨Servlets(ËäÈ»²»ÊÇHttpServlet)ʵ¼ÊÉϾÍÓëServletÈÝÆ÷°ó¶¨ÁË, ¶øÕâÖÖÒÀÀµ¹ØÏµ²¢²»ÐèÒª. ÀýÈç, Servlet¿ÉÒÔÔÚWeb»·¾³Ö®ÍâÔËÐÐ, µ«JMS¾Í²»ÄÜ. WebWorkµÄActionûÓаó¶¨Web»òÆäËûÈκÎÈÝÆ÷. WebWorkµÄaction¿ÉÒÔÑ¡Ôñ´ÓActionContextÖлñÈ¡requestºÍresponse, µ«Õâ²»ÊDZØÐëµÄ²¢ÇÒ½öµ±¾ø¶Ô±ØÒªÊ±²ÅÊÇÓÃ, Õâ²¢²»»áÓëWebÈÝÆ÷°ó¶¨. ͬÉÏ ¿É²âÊÔÐÔ ÒѾÓÐÐí¶à²âÊÔStrutsÓ¦ÓõIJßÂÔ, µ«Ö÷ÒªÕϰʵ¼ÊÊÇStrutsµÄActionÓëWeb½ôÃܵİó¶¨ÔÚÒ»Æð(»ñÈ¡RequestºÍResponse¶ÔÏó). ×ŵ¼ÖÂÈËÃǾ³£ÔÚÒ»¸öÈÝÆ÷ÖвâÊÔSstrutsµÄAction, ÕâÑù×ö¼È»ºÂý¶øÓÖÎÞ·¨½øÐе¥Ôª²âÊÔ. ÓÐÒ»¸öJunitµÄÀ©Õ¹°ü : Struts TestCase (http://strutstestcase.sourceforge.net/ ) WebWorkµÄaction¿ÉÒÔͨ¹ýʵÀý»¯action, ÉèÖÃÊôÐÔ²¢Ö´Ðеķ½Ê½½øÐвâÊÔ Í¬ÉÏ, µ«ÖصãÔÚÓÚ·´×ª¿ØÖÆ(Inversion of Control)ÈòâÊÔ±äµÃ¸ü¼òµ¥, Äã¿ÉÒÔÔÚ²âÊÔÖÐÉèÖÃÒ»¸öʵÏÖ·þÎñ½Ó¿ÚµÄMock¶ÔÏó½øÐвâÊÔ, ¶ø²»ÐèÒªÉèÖ÷þÎñ×¢²á±í»òʹÓõ¥¼þ(static singleton) FormBeans StrutsÐèҪΪÿ¸ö±íµ¥Ê¹ÓÃFormBean, Õâ²úÉúÁË´óÁ¿µÄ¶àÓàµÄÀà»òÕß²»µÃ²»Ê¹ÓÃDynaBean, ¶øÕâǡǡÊÇÕâÒ»ÏÞÖÆµÄ²úÎï WebWork 1.xÔÊÐíÖ±½ÓʹÓÃActionµÄÊôÐÔ(Ò²¾ÍÊDZê×¼µÄJavabeanÊôÐÔ), ÊôÐÔ¿ÉÒÔ°üº¬·á¸»µÄ¶ÔÏóÀàÐÍÉõÖÁ¿ÉÒÔÓÐ×Ô¼ºµÄÊôÐÔ, ¶øÕâЩÊôÐÔ¶¼¿ÉÒÔ´ÓWebÒ³ÃæÖзÃÎÊ. WebWorkÒ²Ö§³ÖFormBeanģʽ, ÔÚ"WW1:Populate Form Bean and access its value "ÖÐÓйØÒ»Õⲿ·ÖµÄ½éÉÜ WebWork 2Ö§³ÖWebWork 1ÖеÄÌØÐÔ, »¹¼ÓÈëÁËModelDrivenµÄActions, ËüÔÊÐíʹÓ÷ḻµÄ¶ÔÏóÀàÐÍ»òÓò¶ÔÏó×÷Ϊform bean, ¿ÉÒÔÔÚWebÒ³ÃæÖÐÖ±½Ó·ÃÎÊËüµÄÊôÐÔ, ÕâÒªºÃÓÚ×÷Ϊ»î¶¯ÊôÐÔµÄ×ÓÊôÐÔ½øÐзÃÎÊ. ±í´ïʽÓïÑÔ Struts 1.1¼¯³ÉÁËJSTL, Òò´ËËüʹÓÃJSTL EL. ¸ÃÓïÑÔÖ§³Ö»ù±¾µÄ¶ÔÏóͼ±éÀú, µ«¶Ô¼¯ºÏºÍË÷ÒýµÄÊôÐÔµÄÖ§³ÖÒªÈõһЩ. WebWork 1.xÓµÓÐ×Ô¼ºµÄ±í´ïʽÓïÑÔÓÃÒÔ·ÃÎÊÖµÕ». ¶Ô¼¯ºÏÒÔ¼°Ë÷ÒýÊôÐÔµÄÖ§³ÖºÜ»ù±¾µ«ºÜºÃ. WebWorkÒ²¿ÉÒÔÖ±½ÓÓëJSTL¹²Í¬Ê¹ÓÃ, ²Î¼ûWW1:Using JSTL seamlessly with WebWork WebWork 2ʹÓÃXW:Ognl , ÕâÊÇÒ»¸ö·Ç³£Ç¿´óµÄ±í´ïʽÓïÑÔ, Ò²¿ÉÒÔ·ÃÎÊÖµÕ». Ognl¶Ô¼¯ºÏºÍË÷ÒýÊôÐÔµÄÖ§³Ö·Ç³£Ç¿´ó. Ognl»¹Ö§³ÖһЩǿ´óµÄÌØÐÔÈçͶÉä(projections, ¶Ô¼¯ºÏµÄÿһ¸öÔªËØµ÷ÓÃͬһ¸ö·½·¨²¢Ê¹Óýá¹û´´½¨Ò»¸öÐµļ¯ºÏ), ÌôÑ¡(selections, ʹÓÃÒ»¸öÑ¡Ôñ±í´ïʽ¹ýÂ˼¯ºÏ²¢·µ»ØÒ»¸ö×Ó¼¯), ÁÐ±í¹¹ÔìºÍlambda±í´ïʽ (¼ò»¯¹¦ÄÜ). Ognl»¹ÄÜ·ÃÎʾ²Ì¬·½·¨, ¾²Ì¬×ֶκ͹¹Ôì·½·¨. WebWork2Ò²ÄÜʹÓÃJSTL, ²Î¼ûWW1:Using JSTL seamlessly with WebWork ½«Öµ°ó¶¨µ½ÊÓͼ StrutsʹÓñê×¼µÄJSP½«¶ÔÏó°ó¶¨µ½pageContext, ÕâʹµÃÊÓͼÓëformBean½ôÃÜñîºÏ WebWorkÉèÖÃÁËÖµÕ», WebWork±êÇ©¿â¿ÉÒÔ´ÓÖÐÊ®·ÖÁé»îµÄ¶¯Ì¬²éÕÒËùÐèµÄÖµ, ¶ø²»ÐèÒª½«ÊÓͼÓëÊý¾ÝÀàÐͽôÃÜñîºÏ. ÕâÑù¾Í¿ÉÒÔÔںܴóµÄ·¶Î§ÄÚ¸´ÓÃÊÓͼ. ͬÉÏ ÀàÐÍת»» StrutsµÄFormBeansÊôÐÔͨ³£¶¼ÊÇ×Ö·û´®. StrutsʹÓÃCommons-Beanutils½øÐÐÀàÐÍת»». ÿ¸öÀàʹÓÃÒ»¸öת»»Æ÷, µ«²»ÔÊÐíΪÿ¸öʵÀýÅäÖò»Í¬µÄת»»Æ÷. »ñȡһ¸öÓÐÒâÒåµÄÀàÐÍת»»´íÎó²¢ÏÔʾ¸øÓû§Ò²ÊǺÜÄÑ×öµ½µÄ. WebWork 1.xʹÓÃPropertyEditors½øÐÐÀàÐÍת»». PropertyEditorsÕë¶ÔÀàÐͶø²»ÊÇAction, µ«×ֶδíÎóÐÅÏ¢¿ÉÒÔ¼Óµ½»î¶¯µÄ×Ö¶ÎÐÅÏ¢±íÖв¢×Ô¶¯ÏÔʾ¸øÓû§. WebWork2ʹÓÃOgnl½øÐÐÀàÐÍת»», ²¢Îª»ù±¾ÀàÐÍÌṩÁËת»»Æ÷. ÀàÐÍת»»È±Ê¡Çé¿öÏÂʹÓÃÉÏÊöת»»Æ÷, µ«Ò²¿ÉÒÔΪÿ¸öÀàµÄÿ¸ö×Ö¶ÎÖ¸¶¨×ª»»Æ÷. ÀàÐÍת»»´íÎóÒ²ÓÐȱʡ´íÎóÐÅÏ¢µ«¿ÉÒÔʹÓñ¾µØ»¯»úÖÆÉèÖÃÿ¸ö×ֶεÄÐÅÏ¢, ×ֶδíÎóÐÅÏ¢¿ÉÒÔ¼Óµ½»î¶¯µÄ×Ö¶ÎÐÅÏ¢±íÖв¢ÏÔʾ¸øÓû§. ǰ/ºó´¦Àíģʽ ±ØÐë´´½¨Ò»¸ö¼Ì³Ð»ùÀàActionµÄÀàÀ´×÷ΪActionǰ/ºó´¦ÀíµÄ´úÀí, Õ⽫µ¼ÖÂÀà¼Ì³Ð²ã´Î¹ýÉî, Ò²¿ÉÄÜÒòΪµ¥¼Ì³ÐµÄÏÞÖÆ¶øÎÞÄÜΪÁ¦WW:Comparison to Struts#1 Àà¼Ì³Ð WebWork 2ÔÊÐíʹÓýØÈ¡Æ÷Ä£¿é»¯Ç°/ºó´¦Àí. À¹½ØÆ÷¿ÉÒÔͨ¹ýÅäÖö¯Ì¬Ìí¼Ó, Á½ÕßÖ®¼äûÓÐÈκÎñîºÏ. УÑé Strutsµ÷ÓÃFormBeanµÄvalidate()·½·¨. StrutsÓû§Í¨³£Ê¹ÓÃCommons Validation½øÐÐУÑé. ÎҶԴ˲»Ì«Á˽â, Òò´Ë½öÌá³ö¼¸¸öÎÊÌâ: ÓÉÓÚFormBeanÊôÐÔÒ»°ã¶¼ÊÇ×Ö·û´®, ijЩУÑé·½·¨ÊÇ·ñ»áÖØ¸´»òÎÞ·¨×öµ½? Commons ValidationÊÇ·ñÄÜΪͬһ¸öÀàÉèÖò»Í¬µÄУÑé»·¾³? (ÎÒÒѱ»¸æÖª¿ÉÒÔ×öµ½, ÕâÊǺÃÊÂ) Commons ValidationÄÜ·ñʹÓÃΪ¶ÔÏóÊôÐÔÀඨÒåµÄУÑ鷽ʽ¶Ô×Ó¶ÔÏó(sub-objects)½øÐÐУÑé? WebWork1.xµ÷ÓÃActionµÄ validate()·½·¨, Äã¿ÉÒÔ±àд´úÂëУÑé, Ò²¿ÉÒÔµ÷ÓÃÍⲿУÑé¿ò¼Ü(ÕâÏÔÈ»ÓëSstrutsÏàͬ) WebWork2¿ÉÒÔʹÓÃWebWork1.xºÍStrutsµÄvalidate()·½·¨, »¹¿ÉÒÔʹÓÃXW:УÑé¿ò¼Ü , ËüÓÉÒ»¸öXWork½ØÈ¡Æ÷¼¤»î. XworkУÑé¿ò¼ÜÔÊÐíÓÃXML¸ñʽ±àдУÑéÆ÷, ¿ÉÒÔΪÿ¸öÀàÌṩһ¸öȱʡУÑéÆ÷²¢ÔÚ²»Í¬µÄУÑé»·¾³ÖÐʹÓö¨ÖÆÐ£ÑéÆ÷.XworkУÑé¿ò¼ÜÓÉÒ»¸ö½ØÈ¡Æ÷¼¤»îÒò´ËÓëActionÀàÍêÈ«½âź. »¹¿ÉÒÔʹÓÃVisitorFieldValidator½«Ð£Ñé´¦ÀíÁ¬½Óµ½×ÓÊôÐÔ(sub-properties, [ÓëÉÏÎÄÌáµ½µÄ×Ó¶ÔÏóÏàͬ ). ¶ÔActionÖ´Ðйý³ÌµÄ¿ØÖÆ ÒÔÎÒµÄÁ˽â, StrutsÉèÖÃÒ»¸öAction¶ÔÏó, ¶øÄã¶ÔÖ´ÐеÄ˳Ðò¼¸ºõÎÞ·¨¿ØÖÆ. Òª¸Ä±äÕâÒ»µã, ÎÒÈÏΪ ÐèÒª±àд×Ô¼ºµÄServletÀ´×ÔÐд¦Àí·Ö·¢(dispatching) ÓÉActionFactoryÁ´¿ØÖÆAction´´½¨ºÍ³õʼ»¯µÄ¹ý³Ì, µ«ÐèÒª±àдһ¸öÀà ÔÚÕâÒÔÎÊÌâÉÏWebWork 2µÄ½ØÈ¡Æ÷ջʮ·ÖÓÐÓÃ. ÉèÖÃActionµÄ¸÷·½Ã湦Äܶ¼±»×ªÒƵ½½ØÈ¡Æ÷ÖÐʵÏÖ(ÈçÉèÖòÎÊý, УÑéµÈ), Òò´ËÄã¿ÉÒÔÒÀ¾Ý½ØÈ¡Æ÷µÄ¹¦ÄÜ¿ØÖÆÃ¿Ò»¸öActionµÄÖ´ÐÐ˳Ðò. ÀýÈçÄã¿ÉÄÜÏ£ÍûÄãµÄIOC¿ò¼ÜÔÚrequest²ÎÊýÉèÖÃ֮ǰÍê³ÉActionÅäÖÃ, ·´Ö®ÒàÈ» - Ò²¿ÉÒÔʹÓýØÈ¡Æ÷Õ»¶Ôÿ¸ö°ü»òÿ¸öÀà½øÐпØÖÆ.
-
-
- StrutsÓû§ÒѾΪStruts´´½¨ÁËÒ»¸ö½ØÈ¡Æ÷¿ò¼ÜµÄ³ûÐÎ(http://struts.sourceforge.net/saif/ ). ËüĿǰÓÐһЩÑϸñµÄÏÞÖÆ(²»ÄܽøÐÐ"°üΧ(around)"´¦Àí, ×ÓÔÊÐíǰ/ºó´¦Àí), ¶øÇÒÒ²²»ÊÇStrutsÏîÄ¿µÄÒ»²¿·Ö
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Component tag.html b/docs/chinese/wikidocs/Component tag.html
deleted file mode 100644
index 7a49bdd85..000000000
--- a/docs/chinese/wikidocs/Component tag.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
- WebWork 2 : Component±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
ÓÃÖ¸¶¨Ä£°æ»æÖƵ͍ÖƵÄUI×é¼þ. ¿ÉÒÔʹÓÃparam±êÇ©½«ÆäËû¶ÔÏó´«µ½Ä£°æÖÐ. ÔÚÄ£°æÖпÉÒÔʹÓà $parameters._paramname _È¡µÃÕâЩ¶ÔÏó. ÔÚÏÂÃæµÄJSPºÍVelocityµÄÀý×ÓÖÐ, Ïò×é¼þ´«µÝÁËÁ½¸ö²ÎÊý. ÔÚ×é¼þÄÚ²¿, ¿ÉÒÔʹÓÃ$parameters.get('key1')ºÍ$parameters.get('key2')À´·ÃÎʲÎÊý. VelocityÒ²ÔÊÐíʹÓÃ$parameters.key1ºÍ$parameters.key2À´ÒýÓòÎÊý.
Ŀǰ, ¶¨ÖÆUI×é¼þ±ØÐë ±àдÔÚVelocityÖÐ.¼Çס: ²ÎÊýÖµ×ÜÊÇͨ¹ýOgnlValueStackµÃµ½, Òò´ËÈç¹ûÏëÒªÏò×é¼þ´«µÝ×Ö·û´®Îı¾, Ò»¶¨ÒªÓÃÒýºÅ½«ËüÀ¨ÆðÀ´, ÀýÈç: value="'value1'". ·ñÔò½«´ÓÖµÕ»ÖÐËÑË÷¾ßÓз½·¨getValue1()µÄ¶ÔÏó. (ÔÚÎÒ±àдÕⲿ·ÖµÄʱºò, »¹²»ÄÜÍêȫȷÐÅ»áÊÇÕâÑù. ÎÒ»áÑéÖ¤ÕâÒ»Çé¿ö)
Ó÷¨Ê¾Àý
-
-
JSP
<ww:component template="/my/custom/component.vm" />
or
<ww:component template="/my/custom/component.vm" >
<ww:param name="key1" value="value1" />
<ww:param name="key2" value="value2" />
</ww:component>
Velocity
#tag( Component "template=/my/custom/component.vm" )
or
#bodytag( Component "template=/my/custom/component.vm" )
#param( "key1" "value1" )
#param( "key2" "value2" )
#end
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×÷Ϊ×Ö¶ÎÖµ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Components.html b/docs/chinese/wikidocs/Components.html
deleted file mode 100644
index 88a438046..000000000
--- a/docs/chinese/wikidocs/Components.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- WebWork 2 : ×é¼þ
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
-
WebWork½¨Á¢ÔÚXWorkµÄ×é¼þʵÏÖÖ®ÉÏ, Ìṩ×é¼þ¶ÔÏóµÄÉúÃüÖÜÆÚ¹ÜÀí²¢Ê¹×é¼þÔÚÐèҪʱ¿ÉÒÔÓÃÓڻÀà(»òÆäËûÈκÎÓû§´úÂëÖÐ). WebWorkÖÐÓÐÁ½ÖÖÀàÐ͵ÄÀà¿ÉÒÔʹÓÃenabler½Ó¿ÚʵÏÖ·´×ª¿ØÖÆ: »î¶¯ºÍ×é¼þ. ΪÁËÈûÀàÓµÓÐËü×Ô¼ºµÄ×é¼þ¼¯ºÏ, ±ØÐëʹÓÃComponentInterceptorΪ»î¶¯ÉèÖÃ×ÊÔ´. ͬÑùµÄ, Èç¹ûÕâЩ×é¼þÐèÒª³õʼ»¯²¢Ê¹ÓÃÆäËû×é¼þ, ÕâЩ³õʼ»¯»î¶¯½«ÔÚComponentInterceptor½ØÈ¡»î¶¯µÄʱºò½øÐÐ.
ÔÚWebWorkÖÐ×é¼þ¿ÉÒÔ±»ÅäÖóɴæÔÚÓÚÈý¸ö·¶Î§ÖÐ:
-
- Ò»¸öÇëÇóÆÚ¼ä,
- ¿çÔ½Ò»¸öÓû§»á»°, »ò
- WebÓ¦ÓõÄÕû¸öÔËÐÐÖÜÆÚ.
-
-WebWork ÑÓ³Ù¼ÓÔØ(lazy load)×é¼þ, ÕâÒâζ×ÅÎÞÂÛÄÄÒ»·¶Î§µÄ×é¼þ, ¶¼ÔÚʹÓÃÊÇ¿ªÊ¼³õʼ»¯²¢ÔÚ·¶Î§µÄÉúÃüÖÜÆÚ½áÊøÊ±Ïú»Ù. Ò²¾ÍÊÇ˵, Ò»¸öapplication·¶Î§µÄ×é¼þ, for example, ½«ÔÚµÚÒ»¸öʵÏÖ×é¼þµÄEnabler½Ó¿ÚµÄ»î¶¯µÄÓû§ÇëÇóʱ³õʼ»¯, ²¢ÔÚÓ¦ÓýáÊøÊ±±»Ïú»Ù.×é¼þ¿ÉÒÔÒÀÀµÓÚÆäËû×é¼þ, µ«²»ÄÜÒÀÀµÓÚ¸üС·¶Î§µÄ×é¼þ. Òò´Ë, Ò»¸ösession·¶Î§µÄ×é¼þ²»ÄÜÒÀÀµÓÚÒ»¸öÇëÇó·¶Î§µÄ×é¼þ.ËùÓÐ×é¼þ±ØÐè×¢²áÔÚcomponents.xmlÖÐ, ¶Ô¸ÃÎļþµÄÃèÊöÔÚ"ÅäÖÃ"Ò»½ÚÖÐ.
ÿһ´ÎÇëÇóʱ¶¼´æÔÚÈý¸ö×é¼þ¹ÜÀíÆ÷, ÿ¸ö·¶Î§Ò»¸ö. ËûÃÇ×÷Ϊһ¸öÊôÐÔ"DefaultComponentManager"´æÔÚÓÚËûÃÇ´ú±íµÄ·¶Î§¶ÔÏóÖÐ. Òò´Ë, Èç¹ûÄãÐèÒªÒ»¸örequest·¶Î§µÄComponentManager¶ÔÏó, ʹÓÃÏÂÃæµÄ´úÂë:
-
ComponentManager cm = (ComponentManager) request.getAttribute("DefaultComponentManager" );
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Configuration.html b/docs/chinese/wikidocs/Configuration.html
deleted file mode 100644
index c20bf0d51..000000000
--- a/docs/chinese/wikidocs/Configuration.html
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
- WebWork 2 : ÅäÖÃ
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
- WebWorkÓÐÁ½¸öÅäÖÃÎļþÐèÒªÁ˽â: web.xmlºÍxwork.xml. ±¾ÎÄÃèÊöÁËWebWork±ØÐèµÄºÍ¿ÉÑ¡µÄÅäÖÃÎļþµÄÈ«²¿ÐÅÏ¢.
- web.xml
- xwork.xml
- webwork-default.xml
- ½á¹û
- È«¾Ö½á¹û
- ȱʡ½á¹û
-
- ½ØÈ¡Æ÷
- °ü
- Ãû¿Õ¼ä(Namespace)
- ÖØ¼ÓÔØÅäÖÃÎļþ
- webwork.properties
- velocity.properties
-
-ÏÂÎÄÁгöÄãÐèÒªÁ˽âµÄÈ«²¿Îļþ.
-
-
-
-Îļþ ¿ÉÑ¡ λÖÃ(ÓëwebappÏà¶Ô·¾¶) ÓÃ;
-
-web.xml ·ñ /WEB-INF/ Web²¿ÊðÃèÊöÎļþ, °üº¬È«²¿±ØÐèµÄWebWork×é¼þ
-
-xwork.xml ·ñ /WEB-INF/classes/ Ö÷ÅäÖÃÎļþ, °üÀ¨result/viewÀàÐÍ, »î¶¯Ó³Éä, ½ØÈ¡Æ÷µÈ
-
-webwork.properties ÊÇ /WEB-INF/classes/ WebWorkµÄÊôÐÔÎļþ
-
-webwork-default.xml ÊÇ /WEB-INF/lib/webwork-x.x.jar Ó¦µ±°üº¬ÔÚxwork.xmlÖеÄȱʡÅäÖÃ
-
-velocity.properties ÊÇ /WEB-INF/classes/ ¸²¸ÇvelocityµÄȱʡÅäÖÃ
-
-validators.xml yes /WEB-INF/classes/ ¶¨ÒåÊäÈëУÑéÆ÷
-
-components.xml /WEB-INF/classes/ ¶¨ÒåIOC×é¼þ
-
-taglib.tld ·ñ /WEB-INF/lib/webwork-x.x.jar Webwork±êÇ©¿âÃèÊöÎļþ
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Cookbook.html b/docs/chinese/wikidocs/Cookbook.html
deleted file mode 100644
index 803294bb7..000000000
--- a/docs/chinese/wikidocs/Cookbook.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- WebWork 2 : ¾Ñé̸(cookbook)
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Default results.html b/docs/chinese/wikidocs/Default results.html
deleted file mode 100644
index 7ea4f49ab..000000000
--- a/docs/chinese/wikidocs/Default results.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
- WebWork 2 : ȱʡ½á¹û
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
- WebworkÄÜΪ»î¶¯¶¨ÒåÒ»¸öȱʡ½á¹ûÀàÐÍ. Òò´Ë, Äã²»±ØÖ¸¶¨½á¹ûÀàÐÍ. Èç¹ûÒ»¸ö°üÀ©Õ¹ÁËÁíÒ»¸ö°ü¶øÃ»ÓÐΪ×Ó°üÖ¸¶¨ÐµÄȱʡ½á¹ûÀàÐÍ, µ±resultÔªËØµÄtypeÊôÐÔδָ¶¨Ê±Ò²½«Ê¹Óø¸°üµÄȱʡ½á¹ûÀàÐÍ.
-
....
<result-types>
<result-type name="dispatcher" class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" default="true" />
<result-type name="redirect" class="com.opensymphony.webwork.dispatcher.ServletRedirectResult" />
<result-type name="velocity" class="com.opensymphony.webwork.dispatcher.VelocityResult" />
</result-types>
....
<action name="bar" class="myPackage.barAction" >
<result name="success" > foo.jsp</result>
<result name="error" type="velocity" > error.vm</result>
</action>
....
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Dependencies.html b/docs/chinese/wikidocs/Dependencies.html
deleted file mode 100644
index 802901020..000000000
--- a/docs/chinese/wikidocs/Dependencies.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
- WebWork 2 : ÒÀÀµÀà¿â
-
-
-
-
-
-
-
-
-
-
- This page last changed on Aug 26, 2004 by plightbo .
-
-
- ÒÀÀµÀà¿â·ÖΪÔËÐÐʱºÍ±àÒëʱÁ½²¿·Ö.
- ÔËÐÐʱÒÀÀµÀà¿â´æ·ÅÔÚCVSµÄlib/coreĿ¼ÏÂ.
- ±àÒëʱÒÀÀµÀà¿â´æ·ÅÔÚCVSµÄlib/buildĿ¼ÏÂ.
-
-Äã¿ÉÒÔÔÚÉÏÊöĿ¼µÄlibraries.txtÎļþÖвéÕÒµ½ËüÃǵİ汾ºÅ.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Deployment Notes.html b/docs/chinese/wikidocs/Deployment Notes.html
deleted file mode 100644
index 2c8e8ea1a..000000000
--- a/docs/chinese/wikidocs/Deployment Notes.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
- WebWork 2 : ²¿ÊðWebWork×¢ÒâÊÂÏî
-
-
-
-
-
-
-
-
-
-
- ±¾Ò³ÓÉplightbo ×îºóÐÞ¸ÄÓÚ2004Äê5ÔÂ24ÈÕ.
-
-
- WebWork¿ÉÒÔÔڴ󲿷ÖÓ¦Ó÷þÎñÆ÷ÉÏÔËÐжøÃ»ÓÐÈκÎÎÊÌâ. ¾¡¹ÜÈç´Ë, Äã¿ÉÄÜ»¹ÊÇÐèÒª×ö²»¶àµÄ¸Ä¶¯ÒÔ±ãÔÚÄãµÄ»·¾³ÏÂÔËÐÐ.
-Ò»¸ö×ÓÏîÄ¿Òѱ»¼ÓÈëWebWorkµÄCVS²Ö¿âÖÐ, Ëü¼«´óµÄ¼ò»¯ÁËʹWebWorkÔÚBEA Weblogic Server 6.1ÏÂÔËÐÐËùÐèµÄµÄÐ޸Ť×÷. Ïà¹ØÎĵµÒ²°üº¬ÔÚÆäÖÐ.
-¸Ã×ÓÏîĿλÓÚĿ¼"misc"ÖÐ.
ÐèҪΪWebWork·ÖÅäÐí¿É:
-
-
-
grant {
permission java.security.AllPermission;
};
-
»ò¸üÃ÷È·µØ,
- ·ÖÅä¶Ôjava.util.PropertyPermissionµÄдÐí¿É.
- Ôö¼Ójava.lang.reflect.ReflectPermission "suppressAccessChecks"
- OgnlInvokeÐí¿É
-
-
-
grant {
permission java.util.PropertyPermission "*" , "read, write" ;
permission java.lang.reflect.ReflectPermission "suppressAccessChecks" ;
permission ognl.OgnlInvokePermission "*" ;
};
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Describing a bean in velocity.html b/docs/chinese/wikidocs/Describing a bean in velocity.html
deleted file mode 100644
index abc6a101b..000000000
--- a/docs/chinese/wikidocs/Describing a bean in velocity.html
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
- WebWork 2 : Describing a bean in velocity
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 10, 2004 by sutter2k .
-
-
- The follow snippet might be useful during debugging to list the properties inside an
-arbitary bean. Or for handing to a UI developer that use unaware of the getters/setters inside an object.
-
## prints out the property names for a bean
#macro (describeBean $name)
#set($bu = $webwork.bean("com.opensymphony.util.BeanUtils" ))
#foreach($propName in $bu.getPropertyNames($name))
<li>$propName</li>
#end
#end
-
i.e. assuming $obj is a PersonObject that has properties(firstName, lastName, and zip).
-
-would print
-<li>firstName</li>
-<li>lastName</li>
-<li>zip</li>One might also expand upon this to build a dynamic interface with via reflection. e.g.
-
-
$webwork.evalute("$obj.${propName}" )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Dispatcher Result.html b/docs/chinese/wikidocs/Dispatcher Result.html
deleted file mode 100644
index d18bd3e5b..000000000
--- a/docs/chinese/wikidocs/Dispatcher Result.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
- WebWork 2 : Dispatcher Result
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
-
-°üº¬»òǰ½øµ½Ò»¸öÊÓͼ(ͨ³£ÊÇJSP). WebWorkʹÓÃRequestDispatcher, ¶øÄ¿±êservlet/JSP»áÊÕµ½ÓëÔʼServlet/JSPÏàͬµÄrequest/response¶ÔÏó. Òò´Ë, Äã¿ÉÒÔʹÓÃrequest.setAttribute()ÔÚËüÃÇÖ®¼ä´«µÝ²ÎÊý – WebWorkµÄ»î¶¯Ò²¿ÉÒÔʹÓÃ.
-
-²ÎÊý ±ØÐè ÃèÊö
-
- location ÊÇ Ö´ÐкóÌø×ªµÄλÖÃ(ÀýÈç: jsp)
-
- parse ·ñ ȱʡΪtrue. Èç¹ûÉèΪfalse, location²ÎÊý½«²»×÷ΪOgnl±í´ïʽ½øÐнâÎö
-
-
-
-
<result name="success" type="dispatcher" >
<param name="location" > foo.jsp</param>
</result>
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Documentation.html b/docs/chinese/wikidocs/Documentation.html
deleted file mode 100644
index 1d8ea7422..000000000
--- a/docs/chinese/wikidocs/Documentation.html
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
- WebWork 2 : Documentation
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/ExecuteAndWaitInterceptor.html b/docs/chinese/wikidocs/ExecuteAndWaitInterceptor.html
deleted file mode 100644
index a8da963a6..000000000
--- a/docs/chinese/wikidocs/ExecuteAndWaitInterceptor.html
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
- WebWork 2 : ExecuteAndWaitInterceptor
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 01, 2004 by mbogaert .
-
-
- The ExecuteAndWaitInterceptor is great for running long-lived actions in the background while showing the user a nice progress meter. This also prevents the HTTP request from timing out when the action takes more than 5 or 10 minutes.
Using this interceptor is pretty straight forward. Assuming that you are including webwork-default.xml , this interceptor is already configured but is not part of any of the default stacks. Because of the nature of this interceptor, it must be the last interceptor in the stack. A typical configuration looks like:
-
-
-
...
<action name="myLongRunningAction" class="..." >
<interceptor-ref name="defaultStack" />
<interceptor-ref name="execAndWait" />
<result name="wait" > longRunningAction-wait.jsp</result>
<result name="success" > longRunningAction-success.jsp</result>
</action>
...
-
This interceptor works on a per-session basis. That means that the same action name (myLongRunningAction , in the above example) cannot be run more than once at a time in a given session. On the initial request or any subsequent requests (before the action has completed), the wait result will be returned. The wait result is responsible for issuing a subsequent request back to the action, giving the effect of a self-updating progress meter .
An example of a simple wait JSP is:
-
-
-
<html>
<head>
<title> Please wait</title>
<meta http-equiv="refresh" content="5;url=<ww:url includeParams=" 'all'" /> " />
</head>
<body>
Please wait while we process your request.
Click <a href="<ww:url includeParams=" 'all'" /> " ></a> if this page does not reload automatically.
</body>
-
Whenever the wait result is returned, the action that is currently running in the background will be placed on top of the stack . This allow you to display progress data, such as a count, in the wait page. By making the wait page automatically reload the request to the action (which will be short-circuited by the interceptor), you can give the appearance of an automatic progress meter.
To set the Thread priority, add the parameter threadPriority (defaults to Thread.NORM_PRIORITY):
-
-
-
<interceptor name="execAndWait" class="com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor" />
<interceptor-stack name="defaultStack" >
...
<interceptor-ref name="execAndWait" >
<param name="threadPriority" > 10</param>
</interceptor-ref>
</interceptor-stack>
-
The thread will receive the name of the action with 'BackgroundThread' appended.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Exposing webwork objects to JSTL, with a JSTL and DisplayTag Example.html b/docs/chinese/wikidocs/Exposing webwork objects to JSTL, with a JSTL and DisplayTag Example.html
deleted file mode 100644
index 27bf7cca5..000000000
--- a/docs/chinese/wikidocs/Exposing webwork objects to JSTL, with a JSTL and DisplayTag Example.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
- WebWork 2 : Exposing webwork objects to JSTL, with a JSTL and DisplayTag Example
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
-
-
<ww:set name="jobz" value="jobs" scope="request" />
-
-The full example below shows a webwork variable "jobs" being exposed as "jobz" to the request scope and being used with jstl and the display tag.
-
-
<%@ taglib uri="/WEB-INF/tlds/c.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/tlds/fmt.tld" prefix="fmt" %>
<%@ taglib uri="/WEB-INF/tlds/displaytag-el-12.tld" prefix="display" %>
<%@ taglib uri="/WEB-INF/tlds/webwork.tld" prefix="ww" %>
<ww:set name="jobz" value="jobs" scope="request" />
<h1><fmt:message key="title.listAllJobs" /></h1>
<display:table name="jobz" class="simple" id="row" >
<display:column titleKey="label.global.actions" >
<c:url var ="viewurl" value="/viewJobDetail.action" >
<c:param name="name" value="${row.name}" />
<c:param name="groupName" value="${row.group}" />
</c:url>
<c:url var ="exeurl" value="/viewJobDetail.action" >
<c:param name="name" value="${row.name}" />
<c:param name="groupName" value="${row.group}" />
<c:param name="executeJobAction" value="execute" />
</c:url>
<c:url var ="editurl" value="/viewJobDetail.action" >
<c:param name="name" value="${row.name}" />
<c:param name="groupName" value="${row.group}" />
<c:param name="editAction" value="edit" />
</c:url>
<a href='<c:out value="${viewurl}" />'><fmt:message key="label.global.view" /></a> |
<a href='<c:out value="${editurl}" />'><fmt:message key="label.global.edit" /></a> |
<a href='<c:out value="${exeurl}" />'><fmt:message key="label.global.execute" /></a>
</display:column>
<display:column property="group" titleKey="label.job.group" sortable="true " />
<display:column property="name" titleKey="label.job.name" sortable="true " />
<display:column property="description" titleKey="label.job.description" />
<display:column property="jobClass" titleKey="label.job.jobClass" sortable="true " />
</display:table>
-
-Please note, at the time of this writing the "titleKey" attribute of the display tag's column tag is not yet released into a final version. It is a feature that is currently, only available through cvs.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/FAQ.html b/docs/chinese/wikidocs/FAQ.html
deleted file mode 100644
index 88a984e22..000000000
--- a/docs/chinese/wikidocs/FAQ.html
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
- WebWork 2 : ³£¼ûÎÊÌâ½â´ð
-
-
-
-
-
-
-
-
-
-
- ±¾Ò³ÓÉlagcisco ×îºóÐÞ¸Ä2005-3-2ÓÚ2004Äê10ÔÂ18ÈÕ.
-
-
- ÖµÕ»ÖеÄȱʡֵÊÇʲô? (ʹÓÃ#foo·ÃÎÊ)
-attr (°´ÕÕ˳ÐòɨÃèrequest, sessionºÍapplicationÊôÐÔ)
-request (request attributes)
-session (session attributes)
-application (application attributes)
-parameters (request params)
How do I get the latest version of Webwork and XWork from CVS?
-cvs -d :pserver:guest@cvs.dev.java.net:/cvs login
-(Use an empty password, just hit enter..)
-cvs -d :pserver:guest@cvs.dev.java.net:/cvs checkout webwork
-cvs -d :pserver:guest@cvs.dev.java.net:/cvs checkout xworkNote: WebWork from the CVS does not compile with the latest 1.5 J2sdk. Use the stable J2sdk 1.4.2.
How do I build the latest versions XWork and Webwork?
-Just go into the XWork or WebWork directories and run 'ant' (you must have ant installed and have the jars of junit and clover inside $ANT_HOME/lib)Once you have built the xwork.jar copy it into the webwork/lib/core folder, and delete the old one.
How do I use messages from within the validator?
-
-
<validators>
<field name="name" >
<field-validator type="requiredstring" >
<message key="template.name.errors.required" > A default message in case the key is not found</message>
</field-validator>
</field>
</validators>
-
How do I set a global resource bundle?
In webwork.properties(as of Webwork 2.1.1),
-you can now use:
-
-
webwork.custom.i18n.resources=global-messages
-
-Serveral resource bundles can be specified by comma separating them.
-for example see webwork.properties :
-http://wiki.opensymphony.com/display/WW/webwork.properties Java class (thanks Drew McAuliffe):
-
-
public class WebworkGlobalMessagesListener implements ServletContextListener {
private static Logger log = Logger.getLogger(WebworkGlobalMessagesListener.class);
private static final String DEFAULT_RESOURCE = "global-messages" ;
/**
* Uses the LocalizedTextUtil to load messages from the global
message bundle.
* @see
javax.servlet.ServletContextListener#contextInitialized(javax.servlet.Servle
tContextEvent)
*/
public void contextInitialized(ServletContextEvent arg0) {
log.info("Loading global messages from " + DEFAULT_RESOURCE);
LocalizedTextUtil.addDefaultResourceBundle(DEFAULT_RESOURCE);
log.info("Global messages loaded." );
}
/**
* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
}
}
-
-web.xml:
-(under listeners section)
-
-
<listener>
<listener-class> mypackagename.WebworkGlobalMessagesListener</listener-class>
</listener>
-
How do I change the error message for invalid inputted fields?
-You need to create a message for that field, for example if you have a user.dob field you would use this in your messages file (see above for example on setting a global messages file):
-invalid.fieldvalue.user.dob=Please enter Date of Birth in the correct format.How do I get access to the Session?
-ActionContext.getContext().getSession() (returns Map, works internally using a ThreadLocal)
How can I see all parameters passed into the Action?
-ActionContext.getParameters() (returns Map, works internally using a ThreadLocal)How can I get the HttpServletRequest?
-ServletActionContext.getRequest() (works internally using a ThreadLocal)
How can I use the IOC container to initialize a component in another object that isnt an action?
-Obtain the ComponentManager from the request: ComponentManager cm = (ComponentManager) ServletActionContext.getRequest().getAttribute("DefaultComponentManager");
-then you need to initialize it using: cm.initializeObject(Object)How do I decouple XWork LocalizedTextUtil global resource bundle loading from serlvets (ServletContextListener)?
-If you're using XWork outside a Web context, then use whatever startup hooks you have in that context (i.e. application start for a desktop app) to add the global resource bundle. This is a startup activity, so use whatever mechanisms are provided in the context you're running in.
What i need to do to put values in a combobox. If I am using webwork2?
-If i have :
-
-
#tag(Select "label='xxx '" "name='xxx'" "list=?" )
or
#tag(combobox "label='Prioridade'" "name='inavis.avisTpPrioridade'" "list=?" )
-
-the values in this combobox, what i need to do?
-Exemple:
-
-
html tag i use to do :
<select..>
<otpion value="" selected>XXX</option>
</selct>
-
-so...i need to do this using Webwork tags from Velocity...how can i do this??How do I add I18N to a UI tag, like ww:textfield?
-
-
<ww:textfield label="'i18n.label'" name="'label1'" value="''" >
-
-This will get the localized text message for the key "i18n.label" and put it in the label.
-
-
<ww:textfield label="getText('i18n.label')" name="'label1'" value="''" >
-
Alternatively, you could modify controlheader.vm and copy it to /template/xhtml. There you could make it so that it automatically does a call to $stack.findValue("getText($parameters.label)"), making the first example actually work for i18n.Can I add I18N outside the Action's context? i.e. adding i18n to some JSP using the ww taglib?
-Yes, use the <ww:i18n> tag to push a resource bundle on to the stack. Now calls with <ww:text/> or <ww:property value="getText(...)"/> will read from that resource bundle.
Can I break up my large XWork.xml file into smaller pieces?
-Sure, that's what the <include> element is for. Most xwork.xml files
-already have one:
-
-
-
<xwork>
<include file="webwork-default .xml" />
<include file="config-browser.xml" />
<package name="default " extends ="webwork-default " >
....
</package >
<include file="other.xml" />
</xwork>
-
This tells it to load the webwork-default.xml from the webwork jar file
-to get all of those interceptor and result definitions.
You can put your own <include> in your xwork.xml interchangeably with
-<package> elements… They will be loaded in the same order as it reads
-from top to bottom and adds things as it reads them.How can I put a String literal in a Javascript call, for instance in an onChange attribute?
The problem is in escaping quotes and getting the double quotes around the final value, like we expect in HTML attributes. Here's an example of the right way to do this (thanks to John Brad):
-
-
-
onchange='"someFunc(this .form, \'abc\')" '
-
Notice here that there are single quotes surrounding the double quotes, and then the single quotes inline in the Javascript are escaped. This produces this result:
-
onchange="someFunc(this .form, 'abc')"
-
Why won't the 'if' tag evaluate a one char string?
-
-
<ww:if test="#myObj.myString == 'A'" >
Why doesn't this work when myString is equal to A?
</ww:if >
-
OGNL will interpret 'A' as a char type and not a string. Simple solution - flip the double and single quotes.
-
-
<ww:if test='#myObj.myString == "A" '>
This works!
</ww:if >
-
Alternatively, you can escape the double quotes in the String:
-
<ww:if test="#myObj.myString == \" A\"">
This works!
</ww:if >
-
I'm trying to run the webwork example in the tutorial on Tomcat, and it can't instantiate the VelocityEngine
Tomcat says:javax.servlet.ServletException: Servlet.init() for servlet webwork threw exception at
-org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:963)
-…
-root cause
java.lang.RuntimeException: Unable to instantiate VelocityEngine!
- at
-com.opensymphony.webwork.views.velocity.VelocityManager.newVelocityEngine(VelocityManager.java:333)
- at
-com.opensymphony.webwork.views.velocity.VelocityManager.init(VelocityManager.java:146)
- at
-com.opensymphony.webwork.dispatcher.ServletDispatcher.init(ServletDispatcher.java:177)
- at
-org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:935)
-Solution: (thanks to Keith Lea)
It turns out Velocity's Avalon logging system was trying to write to my tomcat folder.So that it's on file somewhere for other people, I will describe the solution:
I created a file "velocity.properties" and placed it in my WEB-INF/classes folder. Inside the file I wrote:runtime.log.logsystem.class=org.apache.velocity.runtime.log.NullLogSystem
This stops velocity from logging, and makes webwork work again.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/File Upload Interceptor.html b/docs/chinese/wikidocs/File Upload Interceptor.html
deleted file mode 100644
index 28d964a2c..000000000
--- a/docs/chinese/wikidocs/File Upload Interceptor.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
- WebWork 2 : File Upload Interceptor
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- We can create a nice reusable Interceptor which can hadle file uploads absolutely transparently and Action will not know anything about web-app and just gets its files:
-
- Before further invocation it scans multipart request for files, and if content-type and size is acceptable it puts collected java.io.File instance to invocationContext.parameters Map named according to their <input> names.
- In Action we can just declare properties of type File which will be set by parameters Inteceptor, in execute() we can move file with aFile.renameTo(...) to the right place, or just read the it and leave alone.
- After invocation it removes all uploaded files via aFile.delete(). (Action should not care for iles uploaded waste disk space)
-
-This Interceptor may be configured to filter files with certain mime type or size, and of course to be applied to any action(s) or even included into stack.
-
<interceptor name="fileUpload" class="neuro.util.xwork.FileUploadInterceptor" >
<param name="allowedTypes" >image/jpeg</param>
<param name="maximumSize" >8192</param>
</interceptor>
-
This removes (duplicate) web-app specific code from Action and gives ua a nice reusable component that handles 90% of all typical file upload tasks. Neat. Also illustrates power of Interceptor concept of XW:XWork /WW:WebWork . Try to do this in Struts. 8)
Things to improve: error handling, reporting & i18n.
-
-
-
package neuro.util.xwork;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.webwork.dispatcher.multipart.MultiPartRequestWrapper;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.Interceptor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.File;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
/**
*
*/
public class FileUploadInterceptor implements Interceptor {
protected static final Log log = LogFactory.getLog(FileUploadInterceptor.class);
protected String allowedTypes;
protected String disallowedTypes;
protected Long maximumSize;
/**
*/
public FileUploadInterceptor() {
if (log.isDebugEnabled()) log.debug("new FileUploadInterceptor()" );
}
/**
*/
public void init() {
if (log.isDebugEnabled()) log.debug("init()" );
}
/**
*/
public void destroy() {
if (log.isDebugEnabled()) log.debug("destroy()" );
}
/**
* list of allowed mime-types, optional
*/
public void setAllowedTypes(String allowedTypes) {
this .allowedTypes = allowedTypes;
}
/**
* list of diallowed mime-types, optional
*/
public void setDisallowedTypes(String disallowedTypes) {
this .disallowedTypes = disallowedTypes;
}
/**
* maximum file Size, optional
*/
public void setMaximumSize(Long maximumSize) {
this .maximumSize = maximumSize;
}
/**
*
* TODO: i18n!
*/
public String intercept(ActionInvocation invocation) throws Exception {
if (!(ServletActionContext.getRequest() instanceof MultiPartRequestWrapper)) {
if (log.isDebugEnabled()) log.debug("bypass " + invocation.getProxy().getNamespace() + "/" + invocation.getProxy().getActionName());
return invocation.invoke();
}
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) ServletActionContext.getRequest();
if (multiWrapper.hasErrors()) {
Collection errors = multiWrapper.getErrors();
Iterator i = errors.iterator();
while (i.hasNext()) {
log.error((String ) i.next());
}
}
Enumeration e = multiWrapper.getFileNames();
while (e.hasMoreElements()) {
String inputName = (String ) e.nextElement();
String contentType = multiWrapper.getContentType(inputName);
String fileName = multiWrapper.getFilesystemName(inputName);
File file = multiWrapper.getFile(inputName);
log.info("file " + inputName + " " + contentType + " " + fileName + " " + file);
if (file == null ) {
log.error("Error uploading: " + fileName);
} else {
if (acceptFile(file, contentType, inputName))
invocation.getInvocationContext().getParameters().put(inputName, file);
}
}
String result = invocation.invoke();
e = multiWrapper.getFileNames();
while (e.hasMoreElements()) {
String inputValue = (String ) e.nextElement();
File file = multiWrapper.getFile(inputValue);
log.info("removing file " + inputValue + " " + file);
if (file != null && file.isFile()) file.delete();
}
return result;
}
protected boolean acceptFile(File file, String contentType, String inputName) {
if (log.isDebugEnabled()) log.debug("checking" + inputName + " " + file.getName() + " " + file.length() + " " + contentType);
if (maximumSize != null && maximumSize.longValue() < file.length())
log.error("file is too long :" + inputName + " " + file.getName() + " " + file.length());
else if (allowedTypes != null && allowedTypes.indexOf(contentType) < 0)
log.error("Content-Type not allowed:" + inputName + " " + file.getName() + " " + contentType);
else if (disallowedTypes != null && disallowedTypes.indexOf(contentType) >= 0)
log.error("Content-Type disallowed:" + inputName + " " + file.getName() + " " + contentType);
else {
if (log.isDebugEnabled()) log.debug("accepted" );
return true ;
}
if (log.isDebugEnabled()) log.debug("not accepted" );
return false ;
}
}
-
-Example Page code:
-
-
<form .... enctype="multipart/form-data" >
....
select user icon:
<input type="file" name="picture" >
<form>
-
-Example Action code:
-
-
/**
*/
protected File picture;
public void setPicture(File picture) {
this .picture = picture;
}
/**
*/
public String execute() {
if (picture != null && picture.isFile()) {
final File target = new File("..." );
if (target.exists()) {
if (log.isDebugEnabled()) log.debug("Removed previous picture version" );
target.delete();
}
picture.renameTo(target);
}
}
-
If this Interceptor considered generally useful - may be it will be incorporated into WW2 codebase?
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/File tag.html b/docs/chinese/wikidocs/File tag.html
deleted file mode 100644
index 2c4fde1fb..000000000
--- a/docs/chinese/wikidocs/File tag.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
- WebWork 2 : File±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
ÉÏÔØÎļþ±íµ¥±êÇ©.Ó÷¨Ê¾Àý
-
-
<ww:file name="'uploadedFile'" />
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×÷Ϊ×Ö¶ÎÖµ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- accept ·ñ HTMLµÄacceptÊôÐÔ: Áгö½ÓÊܵÄÎļþÀàÐÍ
-
- onchange ·ñ HTMLµÄonchangeÊôÐÔ
-
- onclick ·ñ HTMLµÄonclickÊôÐÔ
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Form tag.html b/docs/chinese/wikidocs/Form tag.html
deleted file mode 100644
index 7980d51e5..000000000
--- a/docs/chinese/wikidocs/Form tag.html
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
- WebWork 2 : Form±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
Ò»¸öHTML±íµ¥. Ó÷¨Ê¾Àý
-
-
<ww:form name="'myForm'" action="'submit.action'" >
...
</ww:form>
-
-
<ww:form name="'myForm'" action="'submit'" namespace="'/foo'" >
...
</ww:form>
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×÷Ϊ×Ö¶ÎÖµ
-
- openTemplate ·ñ ÓÃÓÚ±êÇ©¿ªÊ¼µÄÄ£°æ
-
- action ÊÇ HTMLµÄactionÊôÐÔ
-
- namespace ·ñ »î¶¯µÄÃû¿Õ¼ä
-
- target ·ñ HTMLµÄtargetÊôÐÔ
-
- method ·ñ 'GET'»ò'POST'
-
- enctype ·ñ HTMLµÄenctypeÊôÐÔ
-
- validate ·ñ ÊÇ·ñʹÓÿͻ§¶ÎУÑé
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ÓÃÓÚ±êÇ©½áÊøµÄÄ£°æÃû
-
-
-
-×¢Òâ : action ÊôÐÔÓÐÁ½ÖÖ¹¤×÷·½Ê½. µÚÒ»¸öÀý×ÓÖÐչʾµÄÊÇ×î³õµÄ(Ò²ÊDZ»·ÏÆúµÄ)¸ñʽ. иñʽÔÊÐí½öʹÓö¨ÒåÔÚxwork.xmlÖеĻÃû³Æ(Èç¹ûÓÐÃû¿Õ¼ä, »¹Òª¼ÓÉÏÃû¿Õ¼ä). Èç¹ûÐèÒª¿Í»§¶ÎУÑé µÄ»°, ÕâÊDZØÐèµÄ
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/FreeMarker Result.html b/docs/chinese/wikidocs/FreeMarker Result.html
deleted file mode 100644
index e54c674a1..000000000
--- a/docs/chinese/wikidocs/FreeMarker Result.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
- WebWork 2 : FreeMarker Result
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by cameronbraid .
-
-
-
-
-
-Parameters Required Description
-
- location yes the location of the template to process
-
- parse no true by default. If set to false, the location param will not be parsed for Ognl expressions
-
- contentType no defaults to "text/html" unless specified
-
-
-
-
<result name="success" type="freemarker" > foo.ftl</result>
-
-
-The FreemarkarManager class configures the template loaders so that the template location can be either
-
- relative to the web root folder. eg /WEB-INF/views/home.ftl
- a classpath resuorce. eg com/company/web/views/home.ftl
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Getting Started.html b/docs/chinese/wikidocs/Getting Started.html
deleted file mode 100644
index 1f8090b90..000000000
--- a/docs/chinese/wikidocs/Getting Started.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
- WebWork 2 : ¿ªÊ¼WebWorkÖ®ÂÃ
-
-
-
-
-
-
-
-
-
-
- ±¾Ò³ÓÉcasey ×îºóÐÞ¸ÄÓÚ2004Äê9ÔÂ10ÈÕ.
-
-
- ±¾Õ¾µãÄÚÈÝÊʺÏÓÚÒѾÀí½âÁËÏà¹Ø¼¼ÊõµÄÓоÑéµÄ¿ª·¢Õß. ÔÚ¿ªÊ¼ÉîÈëÁ˽âWebworkÈçºÎ¹¤×÷²¢ÔËÐÐÑÝʾ³ÌÐò֮ǰ, ÍÆ¼öÄúÖØÐÂÉóÊÓÏÂÁиÅÄî:
-
- Java
- Servlets, JSP, and Tag Libraries
- JavaBeans
- HTML and HTTP
- Web Containers (ex. Tomcat)
- XML
-
-±¾Õ¾µãÌṩ¶àÖÐÏÂÔØÄÚÈÝ. ²Î¼ûÏÂÁÐÁ´½Ó:
-
-
-·¢Ðаü°üº¬ÏÂÁÐĿ¼½á¹¹:
docsĿ¼°üº¬µ±Ç°°æ±¾µÄJavadoc, ÄúÕýÔÚÔĶÁµÄÎĵµ, ÒÔ¼°JunitµÄ¹¹½¨±¨¸æ. libĿ¼°üº¬WebWork±ØÐèµÄÒÔ¼°¿ÉÑ¡ÓõÄÖ§³Ö°ü:
×¢Òâ: ûÓÐÒ»¸ö¿ÉÑ¡°üÊÇWebWorkÔËÐÐʱ±ØÐëʹÓõÄ. Èç¹ûÄãÏ£ÍûʹÓÃÄ³Ð©ÌØÐÔÈçJasperReport»òFreeMarker½á¹ûÀàÐÍ, ¾Í±ØÐë°üº¬¿ÉÑ¡°ü.
WebworkÒ²½«È«²¿µÄÔ´ÎļþºÍJSP±êǩģ°æ´ò°üÔÚÆäÖÐ.
ÏÂÎĽéÉÜÈçºÎÉèÖÃÄãµÄWebÓ¦ÓÃ. ¸´ÖÆwebwork-(VERSION).jar, /lib/coreĿ¼ÖÐÈ«²¿µÄ*.jar ÎļþÒÔ¼°/lib/optionalĿ¼ÖÐÐèÒªµÄ*.jarÎļþµ½ÄãµÄwebapp/libĿ¼ÖÐ. Èç¹ûÄãÐèÒª¶¨ÖÆÄã×Ô¼ºµÄÄ£°æ(ÓÃÓÚÃèÊöÈçºÎʹÓÃwebwork UI±êÇ©»æÖÆHTML), ½«/src/java/templateĿ¼¸´ÖƵ½ÄãµÄwebapp/Ŀ¼ÖÐ. ÄãµÄWebÓ¦Óÿ´ÆðÀ´¿ÉÄÜÏñÕâÑù:
-
-
-
/mywebapp/
/mywebapp/template/
/mywebapp/META-INF/
/mywebapp/WEB-INF/
/mywebapp/WEB-INF/classes/
/mywebapp/WEB-INF/lib/
/mywebapp/WEB-INF/lib/CORE&OPTIONAL *.jar
/mywebapp/WEB-INF/web.xml
-
Äã¿ÉÒÔÖ±½Óǰ½øµ½ÅäÖà »òWebworkÖ¸ÄÏ
ΪÁËÔËÐÐwebworkÓ¦ÓúÍÑÝʾ³ÌÐò, ÄãÐèÒªÒ»¸öservlet/jspÒýÇæ. Èç¹ûûÓÐ, ½¨ÒéÄãÁ˽âÒ»ÏÂApache Tomcat , ÕâÊÇÒ»¸öÓÉApache JakartaÏîÄ¿¿ª·¢µÄÃâ·ÑµÄServletÈÝÆ÷, Ò²¿ÉÒÔʹÓÃCaucho Technology µÄResin, Ëü¿ÉÒÔÃâ·ÑÓÃÓÚ·ÇÉÌÒµÓÃ;. µ±ÄãµÄServletÈÝÆ÷ÉèÖÃÍê±Ïºó, ¾Í¿ÉÒÔ°²×°webworkʾÀýÓ¦ÓÃ(*.war)ºÍÆäËûÈκÎÑÝʾ³ÌÐòÁË, Ö»Ð轫.warÎļþ·ÅÖÃÔÚÈÝÆ÷µÄwebappĿ¼Ï¼´¿É. TomcatµÄĿ¼λÖÃÈçÏÂ:
-
-
<TOMCAT_HOME>/webapps/webwork-example.war
-
-µ±warÎļþ·ÅÖÃÔÚÕýÈ·µÄλÖúó, Æô¶¯webÈÝÆ÷²¢Í¨¹ýWebä¯ÀÀÆ÷·ÃÎÊÏÂÃæµÄURL.http:// HOST:PORT /webwork-example
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Global results.html b/docs/chinese/wikidocs/Global results.html
deleted file mode 100644
index 8ba6a7dd6..000000000
--- a/docs/chinese/wikidocs/Global results.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
- WebWork 2 : È«¾Ö½á¹û
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
- È«¾Ö½á¹ûÔÊÐí¶¨ÒåÒ»¸ö½á¹ûÓ³Éä, Ëü¿ÉÒÔ×÷Ϊȫ²¿»î¶¯µÄȱʡ½á¹û, ²¢×Ô¶¯±»±¾°ü¼°ËùÓÐÀ©Õ¹°üÖеĻ¼Ì³Ð. »»ÑÔÖ®, Èç¹ûÄãÏëΪ¶à¸ö»î¶¯Ö¸¶¨Í¬Ò»¸ö½á¹û, ¾Í¿ÉÒÔ°ÑËü¶¨ÒåΪȫ¾Ö½á¹û.
-
-
-
<package name="default" >
....
<global-results>
<result name="login" type="dispatcher" >
<param name="location" > login.jsp</param>
</result>
</global-results>
<action name="foo" class="mypackage.fooAction" >
<result name="success" type="dispatcher" > bar.jsp</result>
</action>
<action name="submitForm" class="mypackage.submitFormAction" >
<result name="success" type="dispatcher" > submitSuccess.jsp</result>
</action>
...
</package>
-
-µÈͬÓÚ
-
-
<package name="default" >
....
<action name="foo" class="mypackage.fooAction" >
<result name="success" type="dispatcher" > bar.jsp</result>
<result name="login" type="dispatcher" > login.jsp</result>
</action>
<action name="submitForm" class="mypackage.submitFormAction" >
<result name="success" type="dispatcher" > submitSuccess.jsp</result>
<result name="login" type="dispatcher" > login.jsp</result>
</action>
...
</package>
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Hibernate.html b/docs/chinese/wikidocs/Hibernate.html
deleted file mode 100644
index 7325b090a..000000000
--- a/docs/chinese/wikidocs/Hibernate.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
- WebWork 2 : Hibernate
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
- ÔÚWebWorkÖÐʹÓÃHibernateºÎÔÚÆäËûWeb¿ò¼ÜÖÐûʲô²»Í¬. Ö»ÐèÒª°´ÕÕhttp://www.hibernate.org/5.html µÄÃèÊöÅäÖÃHibernate. µ«ÊÇ, Óм¸¸öÒѾÔÚÏÂÁÐÏîÄ¿Öгɹ¦Ó¦ÓõÄÓÅÐãģʽ:
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Hidden tag.html b/docs/chinese/wikidocs/Hidden tag.html
deleted file mode 100644
index 23b94c0bf..000000000
--- a/docs/chinese/wikidocs/Hidden tag.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
- WebWork 2 : Hidden±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
Ò»¸öÀàÐÍΪ"hidden"µÄINPUT±êÇ©.Ó÷¨Ê¾Àý
-
-
<ww:hidden name="'someName'" value="value" />
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×÷Ϊ×Ö¶ÎÖµ
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/How do I populate a form bean and get the value using the taglib.html b/docs/chinese/wikidocs/How do I populate a form bean and get the value using the taglib.html
deleted file mode 100644
index 7468adfc9..000000000
--- a/docs/chinese/wikidocs/How do I populate a form bean and get the value using the taglib.html
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
- WebWork 2 : How do I populate a form bean and get the value using the taglib
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- First off, if you're coming from Struts, you may feel more comfortable using FormBeans instead of using the Action as your form bean. Be aware, though, that in Webwork you DO have the option of having the properties directly in the Action class. If you want to use a FormBean, here's an example:
-
-
public class TestAction extends ActionSupport {
private TestBean myBean;
public TestBean getMyBean() {
return myBean;
}
public void setMyBean(TestBean myBean) {
this .myBean = myBean;
}
protected String doExecute() throws Exception {
myBean = new TestBean();
BeanUtil.setProperties(ActionContext.getContext().getParameters(), myBean);
return SUCCESS;
}
}
-
Then, in your success.jsp, which is mapped as the success result of TestAction in the views.properties or actions.xml (see the docs for how to configure actions and view mappings), you can do this:
-
-
<!-- This will call getMyBean() on your action and put it on the top of the value stack ->
<webwork:property value="myBean" >
<!- This will call getName() on your TestBean and print it to the page -->
The name is: <webwork:property value="name" />
</webwork:property>
-
-This is a good way to do it if you have several parameters from the TestBean that you want to display, but, if you have just one, like in this case, it's probably better to do this:
-
-
<webwork:property value="myBean/name" />
-
-Which will call getMyBean.getName() and print that out to the page.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/HttpHeader Result.html b/docs/chinese/wikidocs/HttpHeader Result.html
deleted file mode 100644
index a71ef8baf..000000000
--- a/docs/chinese/wikidocs/HttpHeader Result.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
- WebWork 2 : HttpHeader Result
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
-
-ʹÓÃÖµÕ»¶¨ÒåHTTPÍ·ÐÅÏ¢.
-
-²ÎÊý ±ØÐè ÃèÊö
-
- status ·ñ HTTPÏìÓ¦µÄ״̬Âë
-
- parse ·ñ ȱʡΪtrue. Èç¹ûÉèΪfalse, location²ÎÊý½«²»×÷ΪOgnl±í´ïʽ½øÐнâÎö
-
- headers ·ñ Í·ÐÅÏ¢µÄÖµ
-
-
-Example:
-
-
<result name="success" type="header" >
<param name="status" > 204</param>
<param name="headers.a" > a custom header value</param>
<param name="headers.b" > another custom header value</param>
</result>
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/I18n tag.html b/docs/chinese/wikidocs/I18n tag.html
deleted file mode 100644
index 5c22a12e9..000000000
--- a/docs/chinese/wikidocs/I18n tag.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
- WebWork 2 : I18n±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
½«×ÊÔ´°ü·ÅÈëÖµÕ», ÒÔ±ãtext±êǩʹÓÃ.ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- name ÊÇ ×ÊÔ´°üµÄÃû×Ö
-
-
-
-Ó÷¨Ê¾Àý
--²Î¼û Text±êÇ©
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Interceptor Order.html b/docs/chinese/wikidocs/Interceptor Order.html
deleted file mode 100644
index 61d55de57..000000000
--- a/docs/chinese/wikidocs/Interceptor Order.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- WebWork 2 : Interceptor Order
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- Interceptors provide an excellent means to wrap before/after processing. The concept reduces code duplication (think AOP).
Order of interceptors…
-
-
-
<interceptor-stack name="xaStack" >
<interceptor-ref name="thisWillRunFirstInterceptor" />
<interceptor-ref name="thisWillRunNextInterceptor" />
<interceptor-ref name="followedByThisInterceptor" />
<interceptor-ref name="thisWillRunLastInterceptor" />
</interceptor-stack>
-
-Note that some interceptors will interrupt the stack/chain/flow… so the order is very important.
Iterceptors implementing com.opensymphony.xwork.interceptor.PreResultListener will run after the Action executes its action method but before the Result executes
-
-
-
thisWillRunFirstInterceptor
thisWillRunNextInterceptor
followedByThisInterceptor
thisWillRunLastInterceptor
MyAction1
MyAction2 (chain)
MyPreResultListener
MyResult (result)
thisWillRunLastInterceptor
followedByThisInterceptor
thisWillRunNextInterceptor
thisWillRunFirstInterceptor
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Interceptors.html b/docs/chinese/wikidocs/Interceptors.html
deleted file mode 100644
index 9e5f2a039..000000000
--- a/docs/chinese/wikidocs/Interceptors.html
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
- WebWork 2 : ½ØÈ¡Æ÷
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
½ØÈ¡Æ÷¿ÉÒÔ¶¯Ì¬½ØÈ¡»î¶¯µ÷ÓÃ. ËüΪ¿ª·¢ÕßÌṩÁËÔڻִÐÐǰºóÖ´ÐÐÆäËû´úÂëµÄ»ú»á. ËüÒ²ÄÜ×èÖ¹»î¶¯Ö´ÐÐ. ½ØÈ¡Æ÷»¹Îª¿ª·¢ÕßÌṩÁË¿ÉÖØÓõķ½Ê½À´·â×°¹«¹²¹¦Äܲ¢½«ËüÓ¦Óõ½Ò»¸ö»ò¶à¸ö»î¶¯ÖÐ. ¸ü¶àÐÅÏ¢²Î¼ûXWork: ½ØÈ¡Æ÷ . Below describes built in Webwork interceptors.
½ØÈ¡Æ÷ÀàÒ²ÄÜÓÃxworkÅäÖÃÎļþÖ¸¶¨µÄÃûÖµ¶Ô(key-value pair)½øÐж¨Òå. ÏÂÁÐÃû×Ö¶¨ÒåÔÚwebwork-default.xml ÎļþÖÐ. Èç¹ûÄãÀ©Õ¹ÁËwebwork-default°ü, Äã¾Í¿ÉÒÔʹÓÃÏÂÁÐÃû×Ö. ·ñÔò±ØÐëÔÚ<interceptors>ÔªËØÖÐʹÓÃÃû×ÖºÍÀàÃû¶¨Òå.
-
-
-
-
-Ãû×Ö ÃèÊö
-
-timer Êä³ö»î¶¯(°üº¬Ç¶Ì׵ĽØÈ¡Æ÷ºÍÊÓͼ)Ö´ÐÐʱ¼ä
-
-logger Êä³ö»î¶¯µÄÃû×Ö
-
-chain ʹµÃǰһ¸ö»î¶¯µÄÊôÐÔÔÚµ±Ç°»î¶¯ÖпÉÓÃ. ͨ³£Óë<result type="chain">ÔªËØ(ÔÚǰһ¸ö»î¶¯¶¨ÒåÖÐ)Ò»ÆðʹÓÃ. ¸ü¶àÄÚÈݲÎÔÄÁ´½Ó½ØÈ¡Æ÷
-
-static-params °Ñxwork.xmlÖж¨ÒåµÄ²ÎÊýÉèÖõ½»î¶¯ÖÐ. Ï൱ÓÚ°üº¬ÔÚ<action />±êÇ©ÖеÄ<param />±êÇ©.
-
-params ½«ÇëÇóµÄ²ÎÊýÉèÖõ½»î¶¯ÀàÖÐ.
-
-model-driven Èç¹û»î¶¯ÊµÏÖModelDriven, ½«getModel()µÄ½á¹ûѹÈëÖµÕ».
-
-component ¼¤»î×¢²áµÄ×é¼þ²¢ÔÊÐí»î¶¯Ê¹ÓÃ. Çë²Î¿¼components.xml
-
-token ÔڻÖмì²éºÏ·¨ÁîÅÆ(token), ·ÀÖ¹±íµ¥µÄÖØ¸´Ìá½»
-
-token-session ͬÉÏ, µ«ÊÇÔÚ½Óµ½·Ç·¨ÁîÅÆÊ±½«Ìá½»µÄÊý¾Ý±£´æÔÚsessionÖÐ
-
-validation ʹÓö¨ÒåÔÚ{Action}-validation.xmlÖеÄУÑéÆ÷½øÐÐУÑé
-
-workflow µ÷ÓûÀàÖеÄvalidate·½·¨. Èç¹û»î¶¯²úÉúÁË´íÎ󽫷µ»Øµ½ÊäÈëÊÓͼ.
-
-servlet-config Ìṩ·ÃÎÊHttpServletRequestºÍHttpServletResponseµÄ;¾¶(ʹÓÃǰÇëÈý˼, ÒòΪËüʹÄãµÄ´úÂëÓëServlet½Ó¿Ú°ó¶¨ÔÚÒ»Æð)
-
-prepare Èç¹û»î¶¯ÊµÏÖPreparable½Ó¿Ú, µ÷ÓÃËüµÄprepare ()·½·¨.
-
-conversionError ½«ActionContextÖеÄÊý¾Ýת»»´íÎóÌí¼Óµ½»î¶¯µÄ×ֶδíÎóÖÐ
-
-fileUpload ¼ò»¯·ÃÎÊÉÏ´«ÎļþµÄ½ØÈ¡Æ÷. ¸ü¶àÐÅÏ¢Çë²é¿´javadoc
-
-execAndWait ÔÚºǫִ́ÐзþÎñ²¢ÏòÓû§·¢ËÍÒ»¸öÖмäµÈ´ýÒ³Ãæ. ²Î¼û: ExecuteAndWaitInterceptor
-
-
½ØÈ¡Æ÷ÌṩÁËÓÅÒìµÄ·½Ê½°üװǰ/ºó´¦Àí. ÕâÒ»¸ÅÄî¼õÉÙÁË´úÂëÖØ¸´ (¿¼ÂÇAOP[ÃæÏò·½Ãæ±à³Ì ]µÄ¸ÅÄî).
-
-
-
<interceptor-stack name="xaStack" >
<interceptor-ref name="thisWillRunFirstInterceptor" />
<interceptor-ref name="thisWillRunNextInterceptor" />
<interceptor-ref name="followedByThisInterceptor" />
<interceptor-ref name="thisWillRunLastInterceptor" />
</interceptor-stack>
-
-×¢Òâ: ijЩ½ØÈ¡Æ÷»áÖжÏÕ»/Á´/Á÷³Ì, Òò´Ë˳ÐòÊ®·ÖÖØÒª.
ʵÏÖcom.opensymphony.xwork.interceptor.PreResultListener½Ó¿ÚµÄ½ØÈ¡Æ÷½«ÔڻִÐÐÖ®ºó, ½á¹ûÖ´ÐÐ֮ǰִÐÐ.
-
-
-
thisWillRunFirstInterceptor
thisWillRunNextInterceptor
followedByThisInterceptor
thisWillRunLastInterceptor
MyAction1
MyAction2 (chain)
MyPreResultListener
MyResult (result)
thisWillRunLastInterceptor
followedByThisInterceptor
thisWillRunNextInterceptor
thisWillRunFirstInterceptor
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Internationalization.html b/docs/chinese/wikidocs/Internationalization.html
deleted file mode 100644
index 6f839a636..000000000
--- a/docs/chinese/wikidocs/Internationalization.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- WebWork 2 : ¹ú¼Ê»¯
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- WebWorkÔÚÁ½Öֵط½Ö§³Ö¹ú¼Ê»¯(¼òдΪi18n): UI±êÇ©ºÍ»î¶¯/×ֶδíÎóÐÅÏ¢.
-°´ÕÕÏÂÁÐ˳ÐòËÑË÷×ÊÔ´°ü:
-
-
- ActionClass.properties
- BaseClass.properties (Ö±µ½Object.properties)
- Interface.properties (ÿ¸ö½Ó¿ÚºÍ¸¸½Ó¿Ú)
- package.properties (ÿһ¸ö»ùÀàµÄ°ü, Ö±µ½java/lang/package.properties)
-
-ÒªÏÔʾi18nÎı¾, ¿ÉÒÔÔÚproperty±êÇ©»òÆäËûÈκÎUI±êÇ©(ÓÃ×÷UI±êÇ©µÄlabelÊ±ÌØ±ðÓÐÓÃ)Öе÷ÓÃgetText():
-
-
-
<ww:property value="getText('some.key')" />
-
Ò²¿ÉÒÔʹÓÃtext±êÇ©:
-
<ww:text name="'some.key'" />
-
×¢Ò⻹ÓÐÒ»¸öi18n±êÇ©, Ëü½«×ÊÔ´°üѹÈëÕ»ÖÐ, ÔÊÐíʹÓóýÇ°ÃæÌáµ½µÄ¼Ì³ÐÁ´ÒÔÍâµÄ×ÊÔ´°üÏÔʾÎı¾.
-
<ww:i18n name="some/package/bundle" >
<ww:text name="'some.key'" />
</ww:i18n>
-
-
-
StrutsÓû§Ó¦¸Ã±È½ÏÊìϤapplication.properties×ÊÔ´°ü, Äã¿ÉÒÔ°ÑÓ¦ÓÃÖÐÐèÒª·ÒëµÄÈ«²¿ÏûÏ¢¶¼·ÅÔÚÀïÃæ. È»¶øWebWork2½«×ÊÔ´°ü·ÖÉ¢ÔÚÿ¸ö»î¶¯»òÄ£ÐÍÀàÖÐ, ÕâЩ×ÊÔ´°ü¿ÉÄܰüº¬Öظ´ÏûÏ¢. ¶Ô´Ë¼òµ¥µÄÐÞÕý·½·¨ÊÇÔÚÀà·¾¶µÄĿ¼com/opensymphony/xworkÖд´½¨ÎļþActionSupport.properties. Õâ½öÔÚÈ«²¿»î¶¯Àà¼Ì³ÐActionSupportµÄÇé¿öϹ¤×÷.Ò²¿ÉÒÔͨ¹ýÉèÖÃwebwork.properties ÖеÄwebwork.custom.i18n.resources À´Ê¹ÓÃÈ«¾Ö×ÊÔ´°ü.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Inversion of Control.html b/docs/chinese/wikidocs/Inversion of Control.html
deleted file mode 100644
index 9de012cf9..000000000
--- a/docs/chinese/wikidocs/Inversion of Control.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
- WebWork 2 : ·´×ª¿ØÖÆ
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
- ·´×ª¿ØÖÆÊÇÒ»ÖÖ´¦Àí¶ÔÏóÒÀÀµµÄ·½·¨. ÔÚWebWorkÖÐ, ¶ÔÏóʹÓÃ"×é¼þ(component)"¹ÜÀíÒÀÀµ¹ØÏµ. ¹ØÓÚ·´×ª¿ØÖƵÄ×ÛÊö(ÏÖÔÚÒ²³Æ×÷Dependency Injection), ÇëÔĶÁMartin Fowler¹ØÓÚIoCµÄÎĵµhttp://www.martinfowler.com/articles/injection.html. ³ýÁËWebWorkµÄIoCÈÝÆ÷, »¹ÓÐÐí¶àÆäËûÈÝÆ÷¿ÉÒÔʹÓÃ, °üÀ¨Spring ºÍPico .
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/IoC Configuration.html b/docs/chinese/wikidocs/IoC Configuration.html
deleted file mode 100644
index 7beea697c..000000000
--- a/docs/chinese/wikidocs/IoC Configuration.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
- WebWork 2 : IoCÅäÖÃ
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by mcampbell .
-
-
-
ΪÅäÖÃWebWorkµÄ×é¼þ¹ÜÀí, ±ØÐëÔÚweb.xmlµÄÊʵ±Î»ÖüÓÈëÏÂÁÐÄÚÈÝ:
-
-
-
<filter>
<filter-name> container</filter-name>
<filter-class> com.opensymphony.webwork.lifecycle.RequestLifecycleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name> container</filter-name>
<url-pattern> *.action</url-pattern>
</filter-mapping>
-->
container</filter-name> -->
*</url-pattern> -->
-->
<listener>
<listener-class> com.opensymphony.webwork.lifecycle.SessionLifecycleListener</listener-class>
</listener>
<listener>
<listener-class> com.opensymphony.webwork.lifecycle.ApplicationLifecycleListener</listener-class>
</listener>
-
ÕâЩÉèÖÃÔÊÐíWebWorkÔÚapplication, sessionºÍrequest·¶Î§ÖйÜÀí×é¼þ. ×¢Ò⼴ʹÄãµÄÓ¦ÓÃÖв»Ê¹ÓÃÈ«²¿scope, ÉÏÊöÈý¸öscopeÒ²±ØÐëÔÚweb.xmlÖÐÖ¸¶¨, ÕâÑùWebWorkµÄ×é¼þ¹ÜÀí²ÅÄÜÕýÈ·¹¤×÷.
ComponentInterceptorÓÃÓÚ¶ÔXWorkµÄ»î¶¯½øÐз´×ª¿ØÖÆ(Ò²¾ÍÊÇ˵, Ϊ»î¶¯Ìṩ×é¼þ). ComponentInterceptorÓ¦µ±ÉùÃ÷ÔÚxwork.xmlµÄ<interceptors>²¿·Ö:
-
<interceptor name="component"
class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor" />
-
Ó¦µ±È·±£ËùÓÐÐèÒª×é¼þµÄ»î¶¯¶¼Ó¦ÓÃÁËÕâ¸ö½ØÈ¡Æ÷. (¹ØÓÚÈçºÎ½«½ØÈ¡Æ÷Ó¦Óõ½»î¶¯ÉÏ, ²Î¼ûOS:XWork Interceptors.)
-Èç¹ûÄãÏò¶Ô»î¶¯ºÍ×é¼þÖ®ÍâµÄ¶ÔÏóʹÓ÷´×ª¿ØÖÆ, ÄãÐèÒªÖ±½ÓʹÓÃComponentManager.
»¹ÐèҪעÒâ, ComponentInterceptorÊÇWebWorkµÄȱʡ½ØÈ¡Æ÷Õ»µÄÒ»²¿·Ö. Òò´Ë, Èç¹û»î¶¯Ê¹ÓÃÁËdefaultStack, ¾ÍÒѾ°üÀ¨ÁËComponentInterceptor.
Îļþcomponents.xmlÓÃÓÚ¶¨Òå¿ÉÓÃ×é¼þ. ÕâÀïÖ¸¶¨µÄ×é¼þ½«±»¼ÓÔØµ½XWorkµÄComponentManager¿ÉÒÔ±»ÈκλʹÓÃ. components.xml±ØÐë·ÅÔÚ¸ùÀà·¾¶ÖÐ(Ò²¾ÍÊÇWEB-INF/classesĿ¼).
-ÕâÀïÓÐÒ»¸öcomponents.xmlÑùÀý, ËüÅäÖÃÁËÒ»¸öCounter×é¼þ. Counter½«Éú´æÔÚsession¶ÔÏóÖÐ, ½«±»´«µÝµ½ÈκÎʵÏÖCounterAware½Ó¿ÚµÄ»î¶¯ÖÐ:
-
-
-
<components>
<component>
<scope> session</scope>
<class> com.opensymphony.webwork.example.counter.Counter</class>
<enabler> com.opensymphony.webwork.example.counter.CounterAware</enabler>
</component>
</components>
-
ÿһ¸ö×é¼þÔªËØ±ØÐè°üº¬ÏÂÁÐÊôÐÔ:
- scope : ÓÐЧֵΪapplication , session ºÍrequest . Ëü¾ö¶¨×é¼þµÄÉú´æÊ±¼ä. Application×é¼þÔÚÓ¦ÓÃÆô¶¯Ê±´´½¨, ½«ÔÚÕû¸öÓ¦ÓõÄÉú´æÆÚ¼äÒ»Ö±´æÔÚ. Session×é¼þ´æÔÚÓÚÒ»¸öÓû§»á»°¹ý³ÌÖÐ, request×é¼þ½ö´æÔÚÓÚÒ»¸ö¿Í»§ÇëÇóÆÚ¼ä.
- class : ×é¼þµÄÀàÃû. ¸Ã¶ÔÏóµÄÒ»¸öʵÀý½«´æÔÚÓÚscopeÖ¸¶¨µÄÖÜÆÚÖÐ, ¿ÉÒÔÓÃÓÚÈκλ(»òÆäËû´úÂë). ×¢Òâ×é¼þʱÑÓ³Ù¼ÓÔØ(lazy-loaded)µÄ, Òò´ËÈç¹ûûÓжÔÏóʹÓøÃ×é¼þ, Ëü½«²»»áÕæÕý±»ÊµÀý»¯. ¸Ã×é¼þ±ØÐëÓÐÒ»¸öÎ޲ι¹Ô캯Êý.
- enabler : ÈκÎʵÏÖ»ò¼¯³É¸ÃÀà(»ò½Ó¿Ú)µÄ»î¶¯¶¼½«±»ÉèÖøÃ×é¼þ.
- ×¢ÒâËäÈ»×é¼þ¿ÉÒÔÒÀÀµÓÚÆäËû×é¼þ, µ«²»ÄÜÒÀÀµÓÚ¸üС·¶Î§µÄ×é¼þ. Òò´Ë, Ò»¸ösession·¶Î§µÄ×é¼þ²»ÄÜÒÀÀµÓÚÒ»¸öÇëÇó·¶Î§µÄ×é¼þ. Òò´Ë, Ò»¸ösession·¶Î§µÄ×é¼þ²»ÄÜÒÀÀµÓÚÒ»¸öÇëÇó·¶Î§µÄ×é¼þ.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/IoC Overview.html b/docs/chinese/wikidocs/IoC Overview.html
deleted file mode 100644
index c2b77ffbb..000000000
--- a/docs/chinese/wikidocs/IoC Overview.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- WebWork 2 : IoC×ÛÊö
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
-
ÔÚÐí¶àÓ¦ÓÃÖÐ, ¶¼ÓÐһЩ¶ÔÏó±ØÐèʹÓÃ×é¼þ¶ÔÏó. ¼òµ¥À´Ëµ, IoCģʽÔÊÐí¸¸¶ÔÏó(ÔÚWebworkºÍXWorkÖÐÊÇComponentManagerʵÀý)ÏòÐèÒªµÄ»î¶¯¶ÔÏóÌṩ×ÊÔ´¶ÔÏó(ͨ³£ÊÇÒ»¸ö»î¶¯, µ«Ò²¿ÉÒÔÊÇÈκÎʵÏÖÊʵ±µÄenabler ½Ó¿ÚµÄ¶ÔÏó), ¶ø²»ÊÇÐèÒª¶ÔÏó×Ô¼º»ñÈ¡×ÊÔ´.ÓÐÁ½ÖÖ·½Ê½ÊµÏÖIoC: ³õʼ»¯»òʹÓÃenabler½Ó¿Ú. ʹÓóõʼ»¯·½Ê½, ¸ø¶¨»î¶¯¶ÔÏóʹÓÃ×ÊÔ´¶ÔÏó×÷Ϊ¹¹Ô캯ÊýµÄ²ÎÊýÍê³É³õʼ»¯. ʹÓÃenabler½Ó¿Ú, »î¶¯½«¾ßÓнӿڵķ½·¨"setComponent(ComponentObject r);", ¸Ã·½·¨ÔÊÐíÔڻ¶ÔÏó³õʼ»¯ºó½«×ÊÔ´¶ÔÏ󴫵ݵ½¸Ã¶ÔÏó. ¸ù¾Ý¶ÔÏóʵÏֵĽӿڴ«µÝ¶ÔÓ¦µÄ×é¼þ¶ÔÏó. XWorkʹÓÃenablers ´«µÝ×é¼þ.
ÄÇôIoCΪʲôÓÐÓÃÄØ? ÕâÒâζ×ÅÎÒÃÇ¿ÉÒÔ²ÉÓÃ×Ô¶¥ÏòÏ·½Ê½¿ª·¢×é¼þ(ͨ³£ÊÇijÀà·þÎñ[, ÈçJDBCÁ¬½Ó, ÔÚ¿Í»§³ÌÐòÖв»ÐèÒªÖªµÀÁ¬½ÓÊÇOracleµÄ»¹ÊÇSybaseµÄ, Ò²²»ÐèÒªÖªµÀÁ¬½ÓÊÇ´ÓÁ¬½Ó³Ø»ñÈ¡»¹ÊÇÆäËû·½Ê½ ]), ¶ø²»ÐèÒª¹¹½¨Ò»¸ö×¢²áÀàÈÿͻ§µ÷ÓÃËüÒÔ»ñÈ¡×é¼þʵÀý.
ʵÏÖ·þÎñµÄ´«Í³·½Ê½¿ÉÄܲÉÓÃÏÂÃæÀàËÆµÄ²½Öè:
-
- ±àд×é¼þ(ÈçExchangeRateService)
- ±àд¿Í»§Àà(ÈçXWork»î¶¯)
- ±àд±£´æ¸Ã×é¼þµÄ×¢²áÀà(ÈçRegistry)
- ±àдÔÚ×¢²áÀàÖÐ×¢²áÖ¸¶¨×é¼þ¶ÔÏóµÄ´úÂë (ÈçRegistry.registerService(new MyExchangeRateService()))
- ÔÚ¿Í»§ÀàÖÐʹÓÃ×¢²áÀà»ñÈ¡·þÎñ(Èç, ExchangeRateService ers = Registry.getExchangeRateService())
- ÔÚ¿Í»§ÀàÖе÷ÓÃ×é¼þ¶ÔÏó(Èç, String baseCurrencyCode = ers.getBaseCurrency())
-
-ʹÓÃIoC, ¸Ã¹ý³Ì¼ò»¯Îª:
-
- ±àд×é¼þÀà(ÈçExchangeRateService)
- ÔÚXWorkÖÐ×¢²á×é¼þÀà(Èç, componentManager.addEnabler(MyExchangeRateService, ExchangeRateAware))
- ±àд¿Í»§Àà, ²¢È·±£ÊµÏÖÁËenabler½Ó¿Ú(ÈçÒ»¸öʵÏÖÁËExchangeRateAware½Ó¿ÚµÄXWork»î¶¯)
- ÔÚ¿Í»§ÀàÖÐÖ±½Ó·ÃÎÊ×é¼þʵÀý(Èç, String baseCurencyCode = ers.getBaseCurrency())
-
-·´×ª¿ØÖƵĸü¶àÓŵãÈçÏÂ:
-
- ¿É²âÊÔÄÜÁ¦ - ¸üÈÝÒ×½øÐвâÊÔ: ʹÓÃenabler·½·¨Ïò¶ÔÏó´«µÝmock¶ÔÏó, ¶ø²»ÐèÒª´´½¨¶ÔÏóÓÃÓÚ»ñÈ¡×é¼þµÄÈÝÆ÷.
- ×é¼þ×ÔÃèÊö. µ±ÐèÒª³õʼ»¯Ò»¸ö×é¼þʱ, ¿ÉÒÔºÜÈÝÒ׵õÃÖª¸Ã×é¼þÐèÒªÄÇЩÒÀÀµ¶ÔÏó(×é¼þ)¶ø²»ÐèÒª²é¿´Ô´´úÂë, Îĵµ»òʾÀý.
- ʹÓ÷´Éä(reflection)ºÜÈÝÒ×·¢ÏÖÒÀÀµ¹ØÏµ. ´Óͼ±íÉú³Éµ½ÔËÐÐʱÓÅ»¯¶¼»á´øÀ´ºÃ´¦(ÀýÈç, ¿ÉÒÔÌáǰÅжÏÂú×ãÇëÇóËùÐèµÄ×é¼þ²¢¿ÉÒÔÒì²½½øÐÐ×é¼þ×¼±¸).
- ±ÜÃâʹÓó¬´ó¹¤³§(super-uber-mega-factory)Éè¼ÆÄ£Ê½(Ó¦ÓõÄÈ«²¿×é¼þ¶¼±£´æÔÚÒ»¸öÀàÖÐ, ÕâÖ±½Óµ¼ÖÂÓëijЩÀàµÄ½ôÃܰ󶨶øÄÑÓÚ'just use that one class').
- ·ûºÏDemeter¶¨ÂÉ(Law of Demeter). ÓÐÈËÈÏΪÕâºÜÓÞ´À, µ«ÔÚʵ¼ùÖÐÎÒ·¢ÏÖÕâÑù¹¤×÷µÄ¸üºÃ. ÿ¸öÀà½öºÍÕæÕýʹÓÃËüµÄÀàñîºÏ(and it should never use too much). ÕâÖÖ·½·¨¹ÄÀøÃ¿¸öÀà³Ðµ£¸üÉÙµÄÔðÈÎ, ´Ó¶ø²úÉú¸üÇåÎúµÄÉè¼Æ.
- ÔÊÐíÓë»·¾³(context)¸ôÀë²¢¿ÉÒÔÈÆ¹ý. ThreadLocalÔÚwebÓ¦ÓÃÖпÉÄܺܺÏÊÊ[hibernateÑùÀý´úÂëÖÐʹÓÃTnreafLocal¹ÜÀísession¶ÔÏó, ±¾ÎÄ¿ÉÄÜÊÇÕë¶ÔÕâÒ»Çé¿ö ], µ«²¢²»Ò»¶¨Êʺϸ߲¢·¢µÄͬ²½Ó¦ÓÃ(ÈçÏûÏ¢Çý¶¯µÄÓ¦ÓÃ).
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Iteration Tags.html b/docs/chinese/wikidocs/Iteration Tags.html
deleted file mode 100644
index 443bb5de1..000000000
--- a/docs/chinese/wikidocs/Iteration Tags.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- WebWork 2 : µü´ú±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
-
- iterator
- generator
- append
- subset
- merge
- sort
- Iterator ½«ÔÚÒ»¸öÖµÉϽøÐеü´ú. µü´úÖµ¿ÉÒÔÊÇÏÂÁÐÀàÐÍÖ®Ò»: java.util.Collection, java.util.Iterator, java.util.Enumeration, java.util.Map, Êý×é.
ʾÀý:
-
-
-
<ww:iterator value="days" >
<p>day is: <ww:property/></p>
</ww:iterator>
-
ÉÏÃæµÄÀý×ÓÖе÷ÓÃÖµÕ»Öе±Ç°¶ÔÏóµÄgetDays()·½·¨È¥µÄµü´úÖµ²¢½øÐеü´ú. <ww:property/>±êÇ©Êä³öÁ˵ü´úµ±Ç°Öµ.
ÏÂÃæµÄÀý×ÓÖÐʹÓÃBeanTag²¢½«Ëü·ÅÈëActionContext. Iterator±êÇ©´ÓActionContextÖлñÈ¡¶ÔÏó²¢µ÷ÓÃgetDays(). ÊôÐÔstatusÓÃÀ´´´½¨Ò»¸öIteratorStatus¶ÔÏó, ±¾ÀýÖÐʹÓÃËüµÄodd()·½·¨À´Êµ¸Ä±äÐÐÑÕÉ«:
-
-
-
<ww:bean name="com.opensymphony.webwork.example.IteratorExample" id="it" >
<ww:param name="day" value="'foo'" />
<ww:param name="day" value="'bar'" />
</ww:bean>
<table border="0" cellspacing="0" cellpadding="1" >
<tr>
<th>Days of the week</th>
</tr>
<ww:iterator value="#it.days" status="rowstatus" >
<tr>
<ww:if test="#rowstatus.odd == true " >
<td style="background: grey" ><ww:property/></td>
</ww:if >
<ww:else >
<td><ww:property/></td>
</ww:else >
</tr>
</ww:iterator>
</table>
-
ÏÂÒ»¸öÀý×Ó½øÒ»²½ÑÝʾÁËstatusÊôÐÔµÄ×÷ÓÃ, ͨ¹ýOGNL´Ó»î¶¯ÖÐÈ¡³ö¶ÔÏóDAO, ʹÓÃDAOµü´ú×éºÍ×é°üº¬µÄÓû§(ÔÚÒ»¸ö°²È«»·¾³ÖÐ). ·½·¨last()±íʾµ±Ç°¶ÔÏóÊÇ·ñÊǵü´úÖÐ×îºóÒ»¸ö¶ÔÏó, Èç¹û²»ÊÇ, ÐèҪʹÓöººÅ°ÑÓû§·Ö¿ª:
-
<webwork:iterator value="groupDao.groups" status="groupStatus" >
<tr class="<webwork:if test=" #groupStatus.odd == true ">odd</webwork:if ><webwork:else >even</webwork:else >" >
<td><webwork:property value="name" /></td>
<td><webwork:property value="description" /></td>
<td>
<webwork:iterator value="users" status="userStatus" >
<webwork:property value="fullName" /><webwork:if test="!#userStatus.last" >,</webwork:if >
</webwork:iterator>
</td>
</tr>
</webwork:iterator>
-
ÏÂÒ»¸öÀý×Óµü´úÒ»¸ö»î¶¯µÄ¼¯ºÏ, ²¢½«Ã¿¸öµü´úÖµ´«µÝ¸øÁíÒ»¸ö»î¶¯.
-
<ww:action name="entries" id="entries" />
<ww:iterator value="#entries.entries" >
<ww:property value="name" />
<ww:property />
<ww:push value="..." />
<ww:action name="edit" id="edit" >
<ww:param name="entry" value="[0]" />
</ww:action>
</ww:iterator>
-
ÕâÀïµÄÇÏÃÅÊÇʹÓÃÁ˲Ù×÷·û'[:0]'. Ëü»ñÈ¡µ±Ç°Öµ²¢´«µÝ¸ø»î¶¯edit.
-'[:0]'²Ù×÷·ûÓë<ww:property /> µÄЧ¹ûÒ»Ñù. (µ±È», Õâ¸ö±êÇ©²»ÄÜÓÃÔÚparam±êÇ©ÖÐ).
-²Î¼ûOS:WebWork2 EL.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Iterator tag examples.html b/docs/chinese/wikidocs/Iterator tag examples.html
deleted file mode 100644
index c55b84b21..000000000
--- a/docs/chinese/wikidocs/Iterator tag examples.html
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
- WebWork 2 : Iterator tag examples
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- This follows on from WW:Iteration Tags which you should read first, but beware of references to '[0]' and 'that'; what you really want in WW2 is 'top', as illustrated below. (I finally worked this out from the source code - hopefully this page means you won't have to.)
The simple examples print out values from the list using the property tag, which uses the value at the top of the stack by default:
But if you're doing anything other than print the value, you probably need to refer to it specifically. Do this:
For 'name' and 'jobTitle' you could be more explicit and write 'top.name' and 'top.jobTitle', as 'top' refers to the object on the top of the stack. It's not necessary here, but it is in the next example.
-
-The trick here is to use 'top' as the value for the inner iterator. This example probably uses a two-dimensional array, but you can use the pattern for any list of lists.
In this example, 'countries' is a list of country objects, each of which has a name and a list of cities. Each city has a name.
The output looks like
Both the country and city objects have a 'name' property. As you'd expect, the reference to 'name' on its own gives you the city name. To access the country name - effectively "hidden" by the city name - we refer to a specific position on the stack: '[1]'. The top of the stack, position 0, contains the current city, pushed on by the inner iterator; position 1 contains the current country, pushed there by the outer iterator.
Actually, as Patrick points out in his comment on WW:Iteration Tags , the '[n]' notation refers to a sub-stack beginning at position n, not just the object at position n. Thus '[0]' is the whole stack and '[1]' is everything except the top object. In our example, we could have been more specific about getting the country name and said '[1].top.name'.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/JFreeChartResult.html b/docs/chinese/wikidocs/JFreeChartResult.html
deleted file mode 100644
index abc798df0..000000000
--- a/docs/chinese/wikidocs/JFreeChartResult.html
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
- WebWork 2 : JFreeChartResult
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
-
-I am rendering a chart to the output stream. Instead of streaming it directly to the response.out, I create a ChartResult, and let webwork do the chaining for me.I generate the chart in one class, and I render it out in another class, effectively decoupling the view from the actions. You can easily render it out to a file or some view other than a web response.out if you wish.
-
-xwork.xml - result-types definitions
-
-
<result-types>
<result-type name="chart" class="myapp.webwork.extensions.ChartResult" />
</result-types>
-
-xwork.xml - action definitions
-
-
<action name="viewModerationChart" class="myapp.webwork.actions.ViewModerationChartAction" >
<result name="success" type="chart" >
<param name="width" >400</param>
<param name="height" >300</param> </result>
</action>
-
-
-My result class searches for a "chart" in the ValueStack and renders it out…
-
-
public class ChartResult implements Result {
private int width;
private int height;
public void execute(ActionInvocation invocation) throws Exception {
JFreeChart chart =
(JFreeChart) invocation.getStack().findValue("chart" );
HttpServletResponse response = ServletActionContext.getResponse();
OutputStream os = response.getOutputStream();
ChartUtilities.writeChartAsPNG(os, chart, width, height);
os.flush();
}
public void setHeight(int height) {
this .height = height;
}
public void setWidth(int width) {
this .width = width;
}
}
-
My action class creates the JFreeChart to render…
-
-
public class ViewModerationChartAction extends ActionSupport {
private JFreeChart chart;
public String execute() throws Exception {
XYSeries dataSeries = new XYSeries(null );
for (int i = 0; i <= 100; i++) {
dataSeries.add(i, RandomUtils.nextInt());
}
XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries);
ValueAxis xAxis = new NumberAxis("Raw Marks" );
ValueAxis yAxis = new NumberAxis("Moderated Marks" );
chart =
new JFreeChart(
"Moderation Function" ,
JFreeChart.DEFAULT_TITLE_FONT,
new XYPlot(
xyDataset,
xAxis,
yAxis,
new StandardXYItemRenderer(StandardXYItemRenderer.LINES)),
false );
chart.setBackgroundPaint(java.awt.Color.white);
return super .SUCCESS;
}
public JFreeChart getChart() {
return chart;
}
}
-
-
-
-
public JFreeChart getChart() {
return chart;
}
-
-makes the chart available on the ValueStack, which the result gets via
-
-
JFreeChart chart = (JFreeChart) invocation.getStack().findValue("chart" );
-
From what I can deduce, the webwork pulls in the height and width variables from the xwork.xml definitions for that particular action…
-
-
<param name="width" >400</param>
<param name="height" >300</param>
-
-
-Currently the "chart" property is hardcoded. There should be a better way of transferring data from the Action to the Result, via some externally defined variable or something. As mentioned by John Patterson (mailing list), the Action is still dependant on a JFreeChart Chart class. This can be improved. The seperation between Action and View can be made cleaner. A chart-agonistic List or Array can be used as the data, and the configuration of the chart details (font, axis, etc...) be done via the result properties in the xwork.xml.
But hey, the above works for now. Any suggestions are welcome.
-
-See WW:CeWolf charts using Velocity templates .
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/JSP Expression Language Comparison with WebWork 1.x.html b/docs/chinese/wikidocs/JSP Expression Language Comparison with WebWork 1.x.html
deleted file mode 100644
index 29336057f..000000000
--- a/docs/chinese/wikidocs/JSP Expression Language Comparison with WebWork 1.x.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
- WebWork 2 : JSP Expression Language Comparison with WebWork 1.x
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 17, 2004 by casey .
-
-
-
-
-Situation Previous (WW-1.4) Current (WW-2.1)
-
-Referring to an object in the PageContext scope @itemIdOrName #attr['itemIdOrName']
-
-Referring to an object in the Request scope itemIdOrName Same, but use #request['itemIdOrName'] if nested in an iteration.
-
-Referring to an object in the Session scope @itemIdOrName #session['itemIdOrName']
-
-Referring to an object in the Application scope @itemIdOrName #application['itemIdOrName']
-
-Property Setters foo/bar translates to getFoo().setBar() foo.bar translates to getFoo().setBar()
-
-Property Getters foo/bar translates to getFoo().getBar() foo.bar translates to getFoo().getBar()
-
-Boolean/boolean Property Getters foo/bar translates to getFoo().getBar() if bar is java.lang.Boolean, if primitive bar translates to getFoo().isBar() Same, except uses dot notation instead of a slash (i.e. foo.bar)
-
-Collections as Properties N/A Collections (including arrays) are similar to other objects, except they allow indexing: foo.bar[indexOrKeyName] translates to getFoo().getBar().get(indexOrKeyName)
-
-curly braces - {}, evaluates contents of braces first, and use the result as the property to then evaluate. <webwork:property value="{'name'}"/> translates to getName() on the curent object. No longer used.
-
-
-Originally written by Jay Bose and sent to the mailing list
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/JSP Tags.html b/docs/chinese/wikidocs/JSP Tags.html
deleted file mode 100644
index e8d74073a..000000000
--- a/docs/chinese/wikidocs/JSP Tags.html
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
- WebWork 2 : JSP±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
-
JavaServer Pages (JSP)ÊÇWebWork(WW)Ö§³ÖµÄÖØÒªÊÓͼ¼¼Êõ. ±¾½ÚÌṩ½«JSP×÷ΪWebWorkµÄÒ»ÏîÊÓͼ¼¼ÊõµÄÏà¹ØÖªÊ¶.²Î¿¼ÄÚÈÝ
-
- ·ÇUI±êÇ©
- UI±êÇ©
- Ä£°æ (UI±êÇ©ÈçºÎ»æÖÆHTML)
- Ö÷Ìâ
-
- µü´ú±êÇ©
- ͨÓñêÇ©
-
-Ò²¿ÉÒԲ鿴WebWork 2 UI±êǩָÄÏ .ÄÇôʲôÊÇJSPÄØ? ´Ó¼¼Êõ½Ç¶ÈÀ´¿´, JSPÊÇ"Ò»¸öÓÐWeb¿ª·¢ÈËÔ±´´½¨µÄ°üº¬JSP¼¼ÊõÌØ¶¨µÄ±êÇ©, ÉùÃ÷ºÍ½Å±¾, ²¢ÓëÆäËü¾²Ì¬±êÇ©(HTML or XML)×éºÏ¶ø³ÉµÄÒ³Ãæ. JSPÒ³ÃæÊ¹ÓÃÀ©Õ¹Ãû.jsp; Õâ֪ͨweb·þÎñÆ÷ʹÓÃJSPÒýÇæ´¦ÀíÒ³ÃæÉϵÄÔªËØ." ¸ü¶àÐÅÏ¢²Î¼ûJSPÎĵµ.
ÁíÍâ, JSP"Ìṩ¼òµ¥, ¿ìËٵĴ´½¨ÏÔʾ¶¯Ì¬Éú³ÉÄÚÈݵÄwebÒ³ÃæµÄ·½·¨. JSP¹æ·¶, ÓÉSunÁìµ¼ÔÚÒ»¸öÐÐÒµÁìÓòÖÆ¶¨, ¶¨ÒåÁË·þÎñÆ÷ºÍJSPÒ³ÃæµÄ½»»¥Çé¿ö, ÃèÊöÁËÒ³ÃæµÄ¸ñʽºÍÓï·¨." ¸ü¶àÐÅÏ¢²Î¼ûJSPÎĵµ.Òò´ËÄã¿ÉÒÔ´´½¨µÚÒ»¸öJSP²¢²¿Êðµ½Web·þÎñÆ÷ÖÐ. µ±Óû§µÚÒ»´Î·ÃÎÊÒ³ÃæÊ±, servletÈÝÆ÷ÈçTomcat½«°ÑJSP±àÒë³ÉServlet, ²¢ÓÃËü»æÖÆWebÒ³Ãæ. ÄÇô, Èç¹û×îÖÕ½á¹ûÊÇservlet, Ϊʲô²»Ö±½Ó±àдservlet? ÒòΪServlet²»ÊÇ´ÓWebÄÚÈÝÖгéÏóWeb±íʾµÄÓÐЧ·½Ê½. ÔÚÔçÆÚ, ÈËÃÇֻʹÓÃServlet±àдWebÒ³Ãæ. ¿ª·¢Õß¿ÉÒÔʹÓÃSerlet¶¯Ì¬Êä³öHTML´úÂë. µäÐͰ취ÊÇÊä³öHTML´úÂë - out.write("<HTML>..);. ¶ÔÓÚά»¤¶øÑÔÕâÖÖ·½·¨¼òÖ±ÊÇØ¬ÃÎ, ÇÒ¿ª·¢³É±¾ºÜ´ó, ÒòΪËüÐèÒªÒ»¸öJava¿ª·¢ÈËÔ±.
JSP¼¼Êõ³öÏÖºó, ¿ª·¢Õß¿ÉÒÔʹÓÃÕßһм¼Êõ×÷Ϊ±íʾ²ã. ÔçÆÚµÄJSP¹æ·¶ÓÐÏÞµØÖ§³Ö¶¨ÖƱêÇ©, Òò´ËÔçÆÚ¿ª·¢ÕâʹÓýű¾ºÍJavaScript´´½¨¶¯Ì¬Õ¾µã. »ìºÏʹÓÃJavaºÍHTML²¢²»ÄÇôÀíÏë, ÒòΪJava´úÂë°üº¬ÔÚ±êÇ©ÖÐ. ÕâʹJSP´úÂëÄÑÒÔÔĶÁÀí½â. ¶ÔÓÚ¼òµ¥µÄÕ¾µãÕâÖÖ·½·¨¿ÉÒÔ¹¤×÷µÄºÜºÃ, µ«²»ÊÊÓÚ¸´ÔÓÕ¾µã. ¸´ÔÓÕ¾µãÐèÒªÒ»ÖֿɹÜÀí, ¿Éά»¤µÄ·½Ê½³éÏóÉè¼ÆºÍÂß¼.ĿǰJSPÒѾ³ÉÊìÁË, ¶Ô¶¨ÖƱêÇ©Ìṩǿ´óµÄÖ§³Ö. ¿ª·¢Õß¿ÉÒÔ±àд¶¨ÖƱêÇ©¿âÀ´ÊµÏÖ¼òµ¥»ò¸´ÔÓµÄÈÎÎñ. ¶¨ÖƱêǩʹÓÃÓëHTMLºÍXMLÒ»Öµļòµ¥ÓïÒå¸ñʽ³éÏó¹¦ÄÜ. ʹÓñàдÁ¼ºÃµÄJSP±êÇ©, ¿ª·¢Õß¿ÉÒÔ²»Ê¹ÓÃJava´úÂëÀ´¿ª·¢ºÍά»¤¸´ÔÓÕ¾µã.
×î³õ±àдһ¸öJSP±êÇ©ÊÇÁîÈËηËõµÄÈÎÎñ, µ«²»Óõ£ÐÄ, WebWorkÌṩÁËÀ©Õ¹±êÇ©¿âÀ´¼ò»¯WebÕ¾µã¿ª·¢. ±êÇ©¿â·Ö³É·ÇUI±êÇ© and UI±êÇ© Á½²¿·Ö. Á½ÕßÖ®¼äÖ÷񻂿±ðÊÇ, UI±êÇ©°üº¬Ò»¸öÒþº¬JSPÄ£°æÀ´»æÖÆHTML±íµ¥¿Õ¼ä»òÒ»×éHTML±êÇ©²úÉú×éºÏÊä³ö½á¹ûÈçtable. ÕâЩģ°æÊ±È±Ê¡µÄ²¢¿ÉÒÔÂú×㿪·¢ÒªÇó. µ«ÊÇÈç¹ûÄãÓÐÆäËûÐèÇó, WebWorkÒ²ÌṩÁËʹÓÃÄã×Ô¼ºµÄÄ£°æÌæ´úȱʡģ°æµÄÄÜÁ¦. ÁíÍâ, ÄãÒ²¿ÉÒÔ½«ÕâЩģ°æ×éÖ¯ÔÚÒ»¸öĿ¼ÏÂ×÷Ϊһ¸öÖ÷ÌâÒýÓÃ.
Ö÷ÌâÌṩÁËΪվµã¸ü»»Íâ¹Û(skin)µÄÄÜÁ¦. Ò»Ì×Íâ¹Û²»½ö½öÒâζ×Ų»Í¬µÄͼÐÎ, ÑÕÉ«µÈ. »¹Òâζ×Ų»Í¬ÊÓͼ¼¼Êõ¶ÔÓ¦µÄ²»Í¬ÊÓ¾õЧ¹û. ÀýÈç, Äã¿ÉÒÔΪWAP, HTMLºÍDHTML·Ö±ð¶¨ÒåÖ÷Ìâ.·ÇUIÌṩ¶ÔÁ÷³Ì¿ØÖÆ, ¹ú¼Ê»¯, WebWork»î¶¯, µü´ú, Îı¾, JavaBeanµÈ¹¦ÄܵÄÖ§³Ö.
¹ØÓÚÕâЩ±êÇ©¸üÏêϸµÄÃèÊöÔÚWebWork±êÇ©¿â¸½Â¼ÖÐ: ·ÇUI±êÇ© , UI±êÇ© .
½éÉÜÈçºÎÔÚWebWorkʹÓÃJSPÊÓͼ¼¼ÊõµÄ×î¼Ñ·½Ê½ÊÇѧϰһ¸ö¼òµ¥µ«ÍêÕûµÄÀý×Ó. ÎÒÃÇ¿¼²ìµÄÀý×Óʵ¼ÊÉÏÊÇÒ»¸öÍøÉÏÉ̵êÓ¦ÓÃ, Èç¹ûÄãÒѾ²¿ÊðÁËWebWorkµÄÀý×Ó, ¾Í¿ÉÒÔÔÚindex.jspÖÐÕÒµ½Ëü. WebWorkÌṩÁËÐí¶àÀý×ÓÒÔ±ãÈËÃǸüºÃµÄÀí½âËüµÄÌØÐÔºÍÄÜÁ¦. ÍøÉÏÉ̵êÓ¦ÓÃÊÇÒ»¸ö¾øºÃµÄÀý×Ó, ÒòΪËüʹÓÃÁË´óÁ¿WebWorkÌØÐÔ.ÔÚ½øÈëʾÀýϸ½Ú֮ǰ, ÏÈ¿´Ò»ÏÂÓ¦ÓõÄÓÃÀý(use case). ÏÂÃæµÄÁбíչʾÁ˶©¹ºCDµÄÁ÷³Ì.
- Ó¦ÓÃÒýµ¼Óû§Ñ¡ÔñÓïÑÔ.
- ΪÓû§ÌṩCDÁбí. ÁбíÖаüº¬ÁËÿ¸öCDµÄ³ªÆ¬Ãû, ÒÕÊõ¼Ò, ºÍ¼Û¸ñ.
- Óû§Ñ¡ÔñÏëÒªµÄCD¼°ÊýÁ¿½«ËüÃÇ·ÅÈ빺Îï³µ.
- Óû§¼ÌÐøÏò¹ºÎï³µÖÐÌí¼Ó»òɾ³ýCD.
- Óû§ÏëÒª¶©»õʱ½«½øÐк˶Ô, ÕâʱÐèÒªÏÔʾ¹ºÎï³µÖеÄÄÚÈÝ.
- Èç¹ûÔ¸ÒâµÄ»°Óû§¿ÉÒÔÔٴιºÎï.
-
-ÈÃÎÒÃÇ¿ªÊ¼ä¯ÀÀÓ¦ÓÃ. µ±ÄãÔÚʾÀýË÷ÒýÒ³ÃæÖÖÑ¡Ôñ¸ÃÓ¦ÓÃʱ, Ëü½«Á¬½Óµ½webwork/i18n/index.jsp. ͨ¹ý²é¿´¸ÃÒ³Ãæ, ÎÒÃÇÖªµÀËü½«×ªÏò»î¶¯ - i18n.Language.action. ȱʡÇé¿öÏÂ, WebWork½«*.actionÓ³Éäµ½ServletDispatcher. ¸ÃÀฺÔð»ñÈ¡Êʵ±µÄ»î¶¯ÀಢִÐÐËü. Èç¹ûÖ´Ðнá¹û±»Ö¸¶¨µ½Ò»¸öÊÓͼ(JSP), ½«×ªÏò¸ÃÊÓͼ.
ServletDispatcherͨ¹ý½âÎöÇëÇóURIÀ´¾ö¶¨Ê¹ÓÃÄÄÒ»¸ö»î¶¯Àà. ±¾ÀýÖÐ, URIÊÇi18n.Language.action. ¸ÃURIÖ±½ÓÓ³Éäµ½webwork.action.test.i18n°üÖеÄÀàLanguage. ×¢ÒâURI²¢²»ÊÇ webwork.action.test.i18n.Language.action¶ø½ö½öÊÇi18n.Language.action. ÕâʱÒòΪÎÒÃÇÔÚwebwork.propertiesÎļþÖÐÖØÐ¶¨ÒåÁË webwork.action.packagesÊôÐÔ. ÕâÔÊÐíÔÚÈκλǰʹÓÃǰ׺webwork.action.test.
-
-
-
webwork.action.packages=webwork.action.test, webwork.action.standard
-
ÏÖÔڲ鿴»î¶¯Language. µÚÒ»¸ö·¢ÏÖÊÇËüÀ©Õ¹ÁËShop(ShopÀ©Õ¹ÁËActionSupport). ¸ÃÀàÊÇÒ»¸öÄ㽫¶à´ÎʹÓõĻùÀà. ÎÒÃǽ«ÔÚºóÃæ¿´µ½, ¸ÃÀàÌṩÁËÒ»×éÓÐÓõŦÄÜ. ÁíÍâ, ËüÌṩÁËÖ´ÐеÄȱʡÁ÷³Ì. ȱʡÇé¿öÏ»½«Ö´ÐÐexecute·½·¨. µ±ÔÚActionSupportÀàÖ´ÐÐexecuteʱ, Ëü½«ÅжÏURIÊÇ·ñÓÐÒ»¸öÃüÁîºó׺Èç!foo. ±¾ÀýÖÐfooÊÇÐèÒªÖ´ÐеÄÃüÁî. ¸ÃÃüÁ±»×ª»»³ÉdoFoo()·½·¨µ÷ÓÃ, ÓÉActionSupportÔڻÖе÷ÓÃ. ÕâÔÊÐíÄãµ÷ÓûÖеķ½·¨.
ÎÒÃǵÄURI²»ÊÇÒ»¸öÃüÁî, Òò´ËActionSupport½«Ê×Ïȵ÷ÓÃdoValidate()·½·¨. ÕâÔÊÐíÄãÔÚÖ´ÐÐǰÍê³ÉУÑé. ÓÉÓÚÎÒÃÇûÓи÷½·¨, ActionSupport½«µ÷ÓÃdoExecute(). ±¾ÀýÖÐ, Language¼à²ìÊÇ·ñÒѾÉèÖÃÁËÓïÑÔ. Èç¹ûûÓÐ, ½«·µ»ØERROR. ServletDispatcher²éÕÒÓëi18n.Language.error¶ÔÓ¦µÄÊÓͼ. ²é¿´WEB-INF/classesĿ¼ÏµÄviews.propertiesÎļþ, ¿ÉÒÔÕÒµ½Ó¦ÓõÄÉèÖÃÐÅÏ¢ÈçÏÂ. ¶ÔÓڸôíÎó, ¿ÉÒԲ鵽Ëü¶ÔÓ¦ÓÚlangauge.jsp.Òò´Ëdispatcher½«×ªÏò¸ÃÒ³Ãæ.
Webshop view mapping:
-
-
-
# Webshop (I18N example adaptation)
i18n.Shop.success=shop.jsp
i18n.Add.success=shop.jsp
i18n.Delete.success=shop.jsp
i18n.Checkout.success=checkout.jsp
i18n.Language.success=shop.jsp
i18n.Language.error=language.jsp
i18n.Restart.success=shop.jsp
i18n.Cart.success=cart.jsp
i18n.CDList.success=cdlist.jsp
-
ÄÇôµ±»î¶¯±»ÌáÈ¡³öÀ´Ê±ÕæÕý·¢ÉúÁËʲô? ȱʡÇé¿öÏÂ, WebWorkʹÓÃDefaultActionFactory×÷ΪActionFactory. ¸Ã¹¤³§ºÍÆäËûÁ´½ÓÒ»ÆðµÄ¹¤³§½«±»µ÷Óò¢ÊÓͼÍê³É»î¶¯»ñÈ¡.
ÒÔLanguageΪÀý. Dispatcher½«µ÷ÓÃDefaultActionFactory²¢ÒªÇóËü·µ»Ø¶ÔÓ¦µÄ»î¶¯. ¸Ã¹¤³§°ÑÇëÇó·ÅÔÚÁ´ÉÏ. Ò»µ©·ÅÔÚÁ´ÉÏ, ÿһ¸ö¹¤³§ÒªÃ´ºöÂÔÇëÇó, Ҫô¶Ô»î¶¯½øÐÐijЩ´¦Àí, Ò²¿ÉÒÔ·µ»Ø»î¶¯. ÏÂÃæµÄÁбíÊÇDefaultActionFactory°üº¬µÄ¹¤³§´úÀí.
-
-
- ParametersActionFactoryProxy - ΪƥÅäµÄ²ÎÊýµ÷ÓûµÄSetter·½·¨.
- PrepareActionFactoryProxy - µ÷ÓûµÄprepare()·½·¨. ÔÊÐí»î¶¯ÔÚУÑé»òÖ´ÐÐǰÍê³ÉÈκÎÐèÒªµÄ×¼±¸»î¶¯.
- ContextActionFactoryProxy - ÉèÖûÉÏÏÂÎÄ(context). »î¶¯¿ÉÒÔʵÏÖ*Aware½Ó¿Ú֪ͨ´úÀíÐèÒªÉèÖÃÄÄЩÄÚÈÝ.
- CommandActionFactoryProxy - °þÈ¥URIÖеÄÃüÁî²¢½«ÃüÁîÉèÖõ½»î¶¯ÖÐ.
- AliasingActionFactoryProxy - Èç¹ûURIÊÇÒ»¸ö±ðÃû, ½«»ñÈ¡»î¶¯Ãû³Æ.
- JspActionFactoryProxy - ½«JSP°ü×°³É»î¶¯.
- PrefixActionFactoryProxy - ʹÓÃÅäÖÃÎļþÖеÄǰ׺²éÕһÀà.
- XMLActionFactoryProxy - »ñȡһ¸öXML»î¶¯.
- ScriptActionFactoryProxy - °ü×°²¢Ö´ÐÐJavaScript.
- JavaActionFactory - ·µ»ØÊʵ±µÄJava»î¶¯¶ÔÏó.
-
-ÈçÄãËù¼û, ÔÚDefaultActionFactoryµÄ¸ÇÍ·Ï·¢ÉúÁËÐí¶àÊÂÇé. ÈÃÎÒÃǻص½Àý×ÓÖпªÊ¼²é¿´Ñ¡ÔñÓïÑÔµÄÒ³Ãælanguage.jsp. ÔÚÕâ¸öÒ³ÃæÖÐ, ʹÓõ¥Ñ¡°´Å¥(radio button)ÏÔʾÁËÒ»×éÓïÑÔÁбí. ÈÃÎÒÃǽøÒ»²½²ú¿´»æÖƿؼþµÄ´úÂë.
-
-
-
<webwork:action name="'i18n.LanguageList'" >
<ui:radio label="'Language'" name="'language'" list="languages" />
</webwork:action>
-
Ê×ÏÈ×¢Òâ·ÇUI±êÇ©action. ¸Ã±êǩִÐлLanguageList. Ö´ÐÐʱ, ¸ÃÀཫ¼ÓÔØlocale-to-languageÓ³Éä±í²¢±£´æµ½ÊôÐÔlanguagesÖÐ. ¸Ã±êÇ©Ëæºó½«»î¶¯¶ÔÏó·ÅÈëÖµÕ»ÒÔ±ãÒýÓÃ.
ÏÖÔÚ¿´¿´UI±êÇ©radio. ¸Ã±êÇ©´´½¨Ò»¸öHTMLµÄINPUT¿Ø¼þ, ÀàÐÍΪradio. ¿Ø¼üµÄÃû×ÖÊÇlanguage, ¿Ø¼þµÄÎı¾ÊÇLanguage. ¿Ø¼þµÄÖµÀ´×ÔÓڻLanguageListµÄgetLanguages()·½·¨µ÷ÓÃ. ¸Ã±êÇ©Ëæºó±éÀúÓ³Éä±í½«¼üÖµ×÷ΪVALUEÊôÐÔ, Ó³ÉäÖµ×÷ΪÏÔʾµÄÎı¾.ÏÖÔÚÓû§¿ÉÒÔÑ¡ÔñÓïÑÔ²¢Ìá½»±íµ¥. ±íµ¥±»ÔÙ´ÎÌá½»µ½»î¶¯Language. ÕâÒ»´ÎÇëÇó²ÎÊýlanguage°üº¬ÔÚÇëÇóÖÐ. µ±»î¶¯Ôٴδ´½¨Ê±, ParametersActionFactoryProxy½«µ÷ÓûµÄsetter·½·¨. ÕâÒâζ×ŵ÷Ó÷½·¨setLanguage(). ÏÖÔÚ, µ±doExecute()Ö´ÐÐʱ»á·¢ÏÖÓû§ÒѾѡÔñÁËÓïÑÔ, Õâʱ½«´´½¨¶ÔÓ¦µÄLocale¶ÔÏó²¢½«Ëü·ÅÈëÓû§µÄsessionÖÐ.
-
session.put("locale" , locale);
-
×¢Ò⽫ÐÅÏ¢·ÅÈësessionÊǶàôµÄ¼òµ¥. µ«sessionÊôÐÔÊÇ´ÓÄÄÀ´µÄÄØ? ¼Çס»î¶¯¼Ì³ÐÁËShop¶ø¸ÃÀàʵÏÖÁËSessionAware½Ó¿Ú. ÒòΪSessionAware°üº¬µÄsetSession()·½·¨½«±»µ÷ÓÃÀ´ÉèÖÃÓû§µÄsession. ÏÖÔÚÎÒÃǽ«locale·ÅÈësession²¢·µ»ØSUCCESS. Dispatcher½«²éÕÒ±ðÃûΪi18n.Language.success²¢·¢ÏÖËüÓ³ÉäΪshop.jsp. Óû§½«±»×ªµ½¸ÃÒ³Ãæ¿ªÊ¼¹ºÎï.
ÔÚÕâÒ»²½ÖÐ, Óû§ÒѾѡÔñÁËÓïÑÔ²¢½«locale¶ÔÏó·ÅÈësession. Óû§ÏÖÔÚÔÚshop.jspÖÐ. ²é¿´¸ÃÒ³ÃæµÄ´úÂëÎÒÃÇ·¢ÏÖ¼¸´¦Ê¹ÓÃÁË·ÇUI±êÇ©text. ¸Ã±êÇ©´Ó×ÊÔ´°üÖÐÌáÈ¡Îı¾. ¸Ã±êÇ©ÄÜʶ±ðlocale²¢Ê¹ÓÃÊʵ±µÄ×ÊÔ´°ü»ñÈ¡ÕýÈ·µÄÎı¾.
-
<webwork:text name="'main.title'" />
-
ÎÒÃÇÒ²×¢Òâµ½¸ÃÒ³Ãæ°üº¬ÁíÒ»¸öÒ³Ãæi18n.CDList.action. ·ÇUI±êÇ©include½«µ÷ÓûCDListÈç¹û³É¹¦µÄ»°½«ÔÚÒ³ÃæÖаüº¬cdlist.jsp. »î¶¯CDList½«´ÓÎı¾ÎļþÖмÓÔØCDÁÐ±í²¢·ÅÈëlist. CDÁбí¼ÓÔØÍê±ÏºóÎÒÃǽ«×¢ÒâÁ¦×ªÒƵ½Ò³Ãæcdlist.jsp
-
CD:<webwork:include page="i18n.CDList.action" />
-
cdlist.jspÌṩһ¸öSELECT±íµ¥¿Ø¼þ.
- ±¾ÀýÖÐ, ÎÒÃDz»Ê¹ÓÃWebWorkµÄUI±êÇ©select. ÎÒÃÇʹÓÃWebWorkµÄ·ÇUI±êÇ©iteratorÀ´´´½¨SELECT¿Ø¼þ. ¸Ã±êÇ©¿ÉÒÔ±éÀúCDÁбí. ÄÇôCDÁбí´ÓÄÄÀïÀ´ÄØ? ¼Çס, ÔÚ´Ë֮ǰÎÒÃǵ÷ÓÃÁËCDList. »î¶¯µ÷Óúó, WebWork½«»î¶¯·ÅÈëÖµÕ»ÒÔ±ãÊÓͼÒýÓÃ. Òò´Ë, ÎÒÃǽ«Ê¹ÓûCDListµÄ·½·¨getCDList(). ¸Ã·½·¨·µ»Ølist¶øiterator±êÇ©½«±éÀúËü. ÿһ´Îµü´ú¶¼½«Êä³öÒ»¸öOPTIONÔªËØ. »¹ÐèҪעÒâ·ÇUI±êÇ©property. ¶ÔÓÚÁбíÖеÄÿһ¸ö³ÉÔ±, property±êÇ©´ÓCDÖÐÈ¡³ö³ªÆ¬Ãû, ÒÕÊõ¼Ò, ºÍ¹ú¼Ò. »¹ÐèҪעÒâ×îºóÒ»¸öpropertyʹÓûComputePriceÀ´¾ö¶¨CDµÄ¼Û¸ñ. ÓïÒå@pricer/computePrice(price)Òâζ×ŵ÷ÓöÔÏópricerµÄgetComputePrice·½·¨²¢½«CDµÄ¼Û¸ñ×÷Ϊ²ÎÊý. ·Ç³£¿á.
-
<webwork:action name="'webwork.action.test.i18n.ComputePrice'" id="pricer" />
<select name="album" >
<webwork:iterator value="CDList" >
<option value="<webwork:property value=" album"/>" >
<webwork:property value="album" />,
<webwork:property value="artist" />, <webwork:property value="country" />,
<webwork:property value="@pricer/computePrice(price)" />
</option>
</webwork:iterator>
</select>
-
ÏÖÔڻص½shop.jsp. ²é¿´´úÂë½øÒ»²½Õ¹Ê¾µÄÆäËûÓÐȤµÄ·½Ãæ. ¿´¿´UI±êÇ©textfieldµÄlabelÊôÐÔ. ×¢ÒâÊôÐÔµÄÖµÊÇ·½·¨µ÷ÓÃtext('main.qtyLabel'). ¸Ã·½·¨´Ó×ÊÔ´ÎļþÖлñÈ¡¶ÔÓ¦µÄ×Ö·û´®. µ«ÊǻÓÐgetText()·½·¨Âð? ¼ÇסShopÀ©Õ¹ÁËActionSupport. ¸Ã»î¶¯Ìṩ¸Ã·½·¨.
-
<ui:textfield label="text('main.qtyLabel')" name="'quantity'" value="1" size="3" />
-
shop.jspÖÐ×îºóÒ»¸öÖµµÄ¹Ø×¢µÄÄÚÈÝÊÇËü°üº¬ÁËÓû§¹ºÎï³µ.
-
<webwork:include value="'cart.jsp'" />
-
µ±cart.jsp(¼ûÏÂÎÄ)±»°üº¬Ê±, ʹÓÃÏÂÃæµÄ´úÂëÈ¡µÃÓû§¹ºÎïÄÚÈÝ. ÊôÐÔvalueµÄÖµ±»×ª»»³ÉÒ»×é·½·¨µ÷ÓÃgetCart()/getItems(). Shopµ÷ÓõĵÚÒ»¸ö·½·¨½«·µ»ØCart, È»ºóÔÚCartÉϵ÷ÓÃÏÂÒ»¸ö·½·¨. Èç¹ûµÚÒ»¸ö·½·¨Ã»ÓÐÈ¡µÃcart, Shop½«´´½¨Ò»¸ö¿ÕµÄcart²¢·ÅÈëÓû§session.
-
<webwork:property value="cart/items" >
<webwork:if test="." >
<center>
<table border="0" cellpadding="0" width="100%" bgcolor='<webwork:text name="'cart.bgcolor'" />'>
<tr>
<td><b><webwork:text name="'cd.albumLabel'" /></b></td>
<td><b><webwork:text name="'cd.artistLabel'" /></b></td>
<td><b><webwork:text name="'cd.countryLabel'" /></b></td>
<td><b><webwork:text name="'cd.priceLabel'" /></b></td>
<td><b><webwork:text name="'cd.quantityLabel'" /></b></td>
<td></td>
</tr>
<webwork:action name="'i18n.ComputePrice'" id="pricer" />
<webwork:iterator>
<tr>
<webwork:property value="cd" >
<td><b><webwork:property value="album" /></b></td>
<td><b><webwork:property value="artist" /></b></td>
<td><b><webwork:property value="country" /></b></td>
<td><b><webwork:property value="@pricer/computePrice(price)" /></b></td>
</webwork:property>
<td><b><webwork:property value="quantity" /></b></td>
<td>
<form action="i18n.Delete.action" method="post" >
<input type=submit value='<webwork:text name="'cart.delLabel'" />'>
<input type=hidden name="album" value='<webwork:property value="cd/album" />'>
</form>
</td>
</tr>
</webwork:iterator>
</table>
<p>
<p>
<form action="i18n.Checkout.action" method="post" >
<input type="submit" value='<webwork:text name="'cart.checkoutLabel'" />'>
</form>
</center>
</webwork:if >
</webwork:property>
-
ÏÖÔÚÓû§¿´µ½CDÁбí. Óû§Ñ¡ÔñÒ»¸öCD, ÊäÈëÊýÁ¿²¢Ìá½»±íµ¥. ±íµ¥Ìá½»µ½i18n.Add.action, Ëü¶ÔÓ¦ÓڻAdd. Ìá½»µÄ²ÎÊý±»ÉèÖõ½»î¶¯ÖÐ. ÔÚÎÒÃǵij¡¾°ÖÐ, Ëü°üÀ¨ÊýÁ¿ºÍ³ªÆ¬Ãû. Ëæºó»î¶¯µÄdoExecute()·½·¨±»µ÷ÓÃ, »ñÈ¡Óû§µÄ¹ºÎï³µ²¢½«CD¼ÓÈë½øÈ¥. »î¶¯·µ»ØSUCCESS, ËüÓ³Éäµ½shop.jsp. Õâ´ÎÓû§µÄ¹ºÎï³µÖÐÓÐÄÚÈݲ¢ÏÔʾÔÚCDÁбíÏÂÃæ.
ÕâÀïÓû§Öظ´Ôö¼Ó»òɾ³ýCDµÄ¹ý³Ì. µ±Ëû½áÊø¹ºÎïʱ, ½«½øÐк˶Ô.
±¾²½ÖèÖÐ, Óû§½áÊø¹ºÎï²¢¾ö¶¨½øÐк˶Ô. ±íµ¥Ìá½»µ½i18n.Checkout.action. Ëü¶ÔÓ¦ÓڻCheckout. ¸Ã»î¶¯¼ÆËãÓû§¹ºÎï³µÖÐÎïÆ·µÄ×ܶ½«ËüÉèÖõ½ÊôÐÔtotalPrice. »î¶¯·µ»ØSUCCESS, Ëü¶ÔÓ¦ÊÓͼcheckout.jsp. ¸ÃÊÓͼÏÔʾÓû§¹ºÎï³µÖеÄÎïÆ·ÒÔ¼°×ܼÛ.
±¾²½ÖèÖÐ, Óû§¿ÉÒÔÔٴιºÎï. Èç¹ûËûÃÇÑ¡ÔñÖØÐ¿ªÊ¼, ¿ÉÒÔÑ¡ÔñÁ´½Ói18n.Restart.action. ¸Ã»î¶¯É¾³ýÓû§¹ºÎï³µ²¢·µ»ØSUCCESS, Ëü¶ÔÓ¦ÊÓͼshop.jsp, ÖØÐ¿ªÊ¼Õû¸ö¹ý³Ì.
Ï£Íû±¾Ê¾ÀýÄܳÉΪÄúÀí½âʹÓÃWebWorkÌØÐÔµÄJSPµÄÆðµã. ±¾Àý²¢Ã»ÓÐÍêȫչʾWebWork, Ëü½ö½öÊÇÒ»¸ö¼ò½é. »¹ÓÐÆäËûµÄÀý×Ó¿ÉÒÔ°ïÖúÄã½øÒ»²½Á˽âWebWork. ÁíÍâ, Ä㻹¿ÉÒÔÔĶÁreferecnceÕ½ÚÒÔÁ˽âWebWork¸ü¶àÐÅÏ¢.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/JUnit.html b/docs/chinese/wikidocs/JUnit.html
deleted file mode 100644
index 71cf93f95..000000000
--- a/docs/chinese/wikidocs/JUnit.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
- WebWork 2 : JUnit
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 09, 2004 by ctran .
-
-
- Äã¿ÉÒÔ²ÉÓü¸ÖÖ·½·¨¶Ô»î¶¯Àà½øÐе¥Ôª²âÊÔ.
´ÓPetsoarÖÐժ¼µÄÀý×Ó:
-
-
package org.petsoar.actions.inventory;
import com.mockobjects.constraint.IsEqual;
import com.mockobjects.dynamic.C;
import com.mockobjects.dynamic.Mock;
import com.opensymphony.xwork.Action;
import junit.framework.TestCase;
import org.petsoar.pets.Pet;
import org.petsoar.pets.PetStore;
public class TestViewPet extends TestCase {
private Mock mockPetStore;
private ViewPet action;
protected void setUp() throws Exception {
mockPetStore = new Mock(PetStore.class);
PetStore petStore = (PetStore) mockPetStore.proxy();
action = new ViewPet();
action.setPetStore(petStore);
}
public void testViewPet() throws Exception {
Pet existingPet = new Pet();
existingPet.setName("harry" );
existingPet.setId(1);
Pet expectedPet = new Pet();
expectedPet.setName("harry" );
expectedPet.setId(1);
mockPetStore.expectAndReturn("getPet" , C.args(new IsEqual(new Long (1))), existingPet);
action.setId(1);
String result = action.execute();
assertEquals(Action.SUCCESS, result);
assertEquals(expectedPet, existingPet);
mockPetStore.verify();
}
public void testViewPetNoId() throws Exception {
mockPetStore.expectAndReturn("getPet" , C.ANY_ARGS, null );
String result = action.execute();
assertEquals(Action.ERROR, result);
assertEquals(1, action.getActionErrors().size());
assertEquals("Invalid pet selected." , action.getActionErrors().iterator().next());
assertNull(action.getPet());
mockPetStore.verify();
}
public void testViewPetInvalidId() throws Exception {
action.setId(-1);
testViewPetNoId();
}
}
-
²é¿´XWork/WebWorkÖеIJâÊÔÓÃÀý. ËüºÜÈ«Ãæ²¢ÌṩÁËºÜºÃµÄÆðµã. ÀýÈç, ÏÂÃæÊÇÈçºÎ²âÊÔParametersInterceptor :
-
public void testDoesNotAllowMethodInvocations() {
Map params = new HashMap();
params.put("@java.lang.System @exit(1).dummy" , "dumb value" );
HashMap extraContext = new HashMap();
extraContext.put(ActionContext.PARAMETERS, params);
try {
ActionProxy proxy = ActionProxyFactory.getFactory().
createActionProxy("", MockConfigurationProvider.MODEL_DRIVEN_PARAM_TEST, extraContext);
assertEquals(Action.SUCCESS, proxy.execute());
ModelDrivenAction action = (ModelDrivenAction) proxy.getAction();
TestBean model = (TestBean) action.getModel();
String property = System .getProperty(" webwork.security.test");
assertNull(property);
} catch (Exception e) {
e.printStackTrace();
fail();
}
}
-
-×¢Òâ: Õâ²»ÊÇΨһµÄ°ì·¨, Òò´ËÇë×Ô¼º¾ö¶¨.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/JasperReports Result.html b/docs/chinese/wikidocs/JasperReports Result.html
deleted file mode 100644
index d8c1347e7..000000000
--- a/docs/chinese/wikidocs/JasperReports Result.html
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
- WebWork 2 : JasperReports Result
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
-
-Generates a JasperReports report using the specified format or PDF if no format is specified.
-
-Parameters Required Description
-
- location yes the location to go to after execution
-
- parse no true by default. If set to false, the location param will not be parsed for Ognl expressions
-
- dataSource yes the Ognl expression used to retrieve the datasource from the value stack (usually a List)
-
- format no the format in which the report should be generated, defaults to pdf
-
- contentDisposition no defaults to "inline" when using documentName unless specified
-
- documentName no generates the http header "Content-disposition = <contentDisposition>; filename=<documentName>.<format>"
-
-
-
-
<result name="success" type="jasper" >
<param name="location" > foo.jasper</param>
<param name="dataSource" > mySource</param>
<param name="format" > CSV</param>
</result>
-
-or for pdf
-
-
<result name="success" type="jasper" >
<param name="location" > foo.jasper</param>
<param name="dataSource" > mySource</param>
</result>
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Label tag.html b/docs/chinese/wikidocs/Label tag.html
deleted file mode 100644
index 732d9cbc1..000000000
--- a/docs/chinese/wikidocs/Label tag.html
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
- WebWork 2 : Label±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
HTMLµÄLABEL±êÇ©: ºÍÆäËûUI¿Ø¼þÓÐÏàͬµÄ¸ñʽ.
- ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×÷Ϊ×Ö¶ÎÖµ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-±¾ÀýÖлæÖÆÁËÒ»¸öÎı¾±êÇ©. Ëüͨ¹ýµ÷ÓÃActionSupportµÄgetText()·½·¨´ÓResourceBundleÖÐÌáÈ¡Îı¾"user_name".
-
-
<ww:label label="text('user_name')" name="'a label'" />
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/License.html b/docs/chinese/wikidocs/License.html
deleted file mode 100644
index 3e157ffc8..000000000
--- a/docs/chinese/wikidocs/License.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : Ðí¿É(License)
-
-
-
-
-
-
-
-
-
-
- ±¾Ò³ÓÉplightbo ×îºóÐÞ¸ÄÓÚ2004Äê11ÔÂ12ÈÕ.
-
-
- [All OpenSymphony projects use the OpenSymphony License, which is a modified Apache License. You can find the license at http://www.opensymphony.com/license.html ]
- OpenSymphonyµÄÈ«²¿ÏîÄ¿¾ùÊÊÓÃOpenSymphonyÐí¿ÉÐÒé, ËüÊÇApacheÐí¿ÉÐÒéµÄÒ»¸öÐ޸İ汾. Äú¿ÉÒÔÔÚhttp://www.opensymphony.com/license.html Öв鿴Ðí¿ÉÐÒé.
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Mailing Lists.html b/docs/chinese/wikidocs/Mailing Lists.html
deleted file mode 100644
index 4196db3d4..000000000
--- a/docs/chinese/wikidocs/Mailing Lists.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : ÓʼþÁбí
-
-
-
-
-
-
-
-
-
-
- This page last changed on May 19, 2004 by ehauser .
-
-
- WebworkÓʼþÁбí¶ÔÈ«²¿¿ª·¢ÈËÔ±ºÍ×îÖÕÓû§¿ª·Å. ÁбíλÓÚhttp://webwork.dev.java.net/servlets/ProjectMailingListList , ʹÓÃÏûÏ¢ÍùÀ´(message-by-message)ºÍ·ÖÀà¸ñʽ±£´æ. ÁбíµÄ´æµµÎļþÌØ¿ÉÒÔ´Ó¸ÃÒ³»ñÈ¡, Òò´ËÔÚ·¢²¼ÐÂÏûϢǰÇëÏÈËÑË÷¹ýÈ¥µÄÏûÏ¢.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Namespaces.html b/docs/chinese/wikidocs/Namespaces.html
deleted file mode 100644
index 6377c15c7..000000000
--- a/docs/chinese/wikidocs/Namespaces.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
- WebWork 2 : Ãû¿Õ¼ä(Namespaces)
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 17, 2004 by casey .
-
-
-
namespacesÊôÐÔÔÊÐí½«»î¶¯ÅäÖøôÀëÔÚ²»Í¬Ãû¿Õ¼äÖÐ, ÕâÑùÄã¿ÉÒÔÔÚ¶à¸öÃû¿Õ¼äÖÐʹÓÃͬһ¸öµÄ»î¶¯±ðÃûÅäÖò»Í¬µÄ»î¶¯Àà(class), ²ÎÊýµÈµÈ. ÕâÓëWebwork 1.x²»Í¬, 1.xÖÐÈ«²¿»î¶¯Ãû¶¼ÊÇÈ«¾ÖµÄ²»ÄÜÔÚÒ»¸öÓ¦ÓÃÖÐÖØ¸´Ê¹ÓÃ. ȱʡµÄÃû¿Õ¼ä""(¿Õ×Ö·û´®)ÓÃÓÚ"²¶»ñ(catch-all)"ÆäËûÃû¿Õ¼ä, Èç¹ûÒ»¸ö»î¶¯Ã»Óаüº¬ÔÚÖ¸¶¨µÄÃû¿Õ¼äÖÐ, ½«ËÑË÷ȱʡÃû¿Õ¼ä. Ëü¿ÉÒÔÔÚÀ©Õ¹¼Ì³ÐÁ´Ö®ÍⶨÒåÒ»¸öÈ«¾Ö»î¶¯ÅäÖÃ, ͬʱҲ¼æÈÝWebwork 1.x°æ±¾²»Ö¸¶¨Ãû¿Õ¼äµÄ×ö·¨. Ãû¿Õ¼äµÄ¹¦ÄÜ»¹¿ÉÒÔÓÃÓÚ°²È«, ÀýÈç, Webwork 2.0µÄ ServletDispatcher°Ñ»î¶¯Ãû³ÆÖ®Ç°µÄ²¿·Ö×÷ΪÃû¿Õ¼ä, Õâ¾ÍʹJ2EE»ùÓÚ·¾¶µÄ°²È«»úÖÆÒ×ÓÚʵÏֺ͹ÜÀí.
-
<package name="default " >
<action name="foo" class="mypackage.simpleAction>
<result name=" success" type=" dispatcher">greeting.jsp</result>
</action>
<action name=" bar" class=" mypackage.simpleAction">
<result name=" success" type=" dispatcher">bar1.jsp</result>
</action>
</package >
<package name=" mypackage" namespace=" /barspace">
<action name=" bar" class=" mypackage.simpleAction">
<result name=" success" type=" dispatcher">bar2.jsp</result>
</action>
</package >
-
-Èç¹ûÇëÇó/barspace/bar.action, ÄÇô½«ËÑË÷mypackage°ü²¢Ö´Ðлbar. Èç¹û»î¶¯·µ»Øsuccess, ¾ÍÏÔʾbar2.jsp. ×¢Òâ: Èç¹ûÇëÇó/barspace/foo.action, ÓÉÓڻfooÔÚÃû¿Õ¼ä/barspaceÖÐÒò´Ë±»ÕÒµ½. Èç¹û»î¶¯²»´æÔÚ, ½«²éÕÒȱÉùÃ÷¿Õ¼ä. δָ¶¨Ê±È±Ê¡Ãû¿Õ¼äÊÇ"". ÉÏÀýÖÐ, Ãû¿Õ¼ä/barspaceÖÐûÓлfoo, Òò´Ë½«ËÑË÷ȱʡÃû¿Õ¼ä²¢Ö´ÐÐ/foo.action.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Non-UI Tags.html b/docs/chinese/wikidocs/Non-UI Tags.html
deleted file mode 100644
index 999a70976..000000000
--- a/docs/chinese/wikidocs/Non-UI Tags.html
+++ /dev/null
@@ -1,369 +0,0 @@
-
-
- WebWork 2 : ·ÇUIÀà±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-ÏÂÁбêÇ©ÓëÖµÕ»½»»¥, ²¢¿ØÖÆÒ³ÃæÂß¼.
-
-
-
ÔÊÐíΪ֧³ÖÔö¼Ó²ÎÊýµÄ±êÇ©ÉèÖòÎÊý.
-
-
-
-ÊôÐÔÃû ±ØÐè ÃèÊö
-
-value ·ñ ÓÃÓÚÏò±êÇ©´«µÝÊý¾Ý.
-
-name ·ñ µ÷ÓõĻÃû³Æ.
-
-
-Äã¿ÉÒÔ½«param±êÇ©·ÅÖÃÔÚÖ§³Ö²ÎÊý±êÇ©µÄÄÚ²¿, param±êÇ©°Ñ²ÎÊý¼ÓÈëµ½ËüµÄ¸¸±êÇ©. Èç¹ûvalueûÓиø¶¨, Ëü½«Ê¹ÓÃÕýÎÄÄÚÈÝ(body)×÷ΪvalueÖµ.ÔÚÏÂÃæµÄÀý×ÓÖÐ, ÿһ¸öparam±êÇ©¶¼°Ñ²ÎÊý¼Óµ½CounterÉÏ. ÕâÒâζ×Åparam½«µ÷ÓÃCounter¶ÔÓ¦µÄsetter·½·¨.
-
<ww:bean name="'webwork.util.Counter'" id="year" >
<ww:param name="'first'" value="text('firstBirthYear')" />
<ww:param name="'last'" value="2000" />
<ui:combobox label="'Birth year'" size="6" maxlength="4" name="'birthYear'" list="#year" />
</ww:bean>
-
-
-·µ»Ø
-
property±êÇ©´ÓÖµÕ»ÖÐÌáȡֵ²¢ÏÔʾ.
-
-
-
-ÊôÐÔÃû ±ØÐè ÃèÊö
-
-id ·ñ Ϊһ¸öÔªËØÖ¸¶¨Î¨Ò»µÄÃû×Ö(×¢Òâ ).
-
-value ·ñ ÓÃÓÚÏò±êÇ©´«µÝÊý¾Ý.
-
-escape ·ñ ¾ö¶¨ÕýÎÄÊÇ·ñÐèÒª½øÐÐÊʵ±µÄתÂëÒÔ·ûºÏHTML×Ö·ûÒªÇó[Èç"&"ת»»Îª"&" ]
-
-
-ÏÂÃæµÄÀý×ÓÃèÊöËüµÄ²»Í¬Ó÷¨:
-
-
-
Print getX().getY()
<ww:property value="x.y" />
-
ȱÉúÇé¿öϽ«¶ÔHTML×Ö·û½øÐÐתÂë, È»¶øÈç¹ûproperty±êÇ©µÄÄÚÈݰüº¬ÔÚÕýÎÄ(body)ÖÐʱ, ½«²»½øÐÐתÂë. ÏÔʾʹÓÃescapeÊôÐÔ½«¸²¸ÇȱʡÐÐΪ. ÒýÓõÄÎÄ×ÖÔÚתÂëʱ, ÆäÍâÃæµÄÒýºÅ(quote)½«±»È¥µô.
»¹Òª×¢ÒâÈç¹ûproperty±êÇ©µÄÕýÎÄΪ¿Õʱ(has an empty body), ËüµÄÐÐΪÓëûÓÐÕýÎÄʱһÑù.
-
-·µ»Ø
-
ÀûÓÃww:push, Äã¿ÉÒÔ½«¶ÔÏóѹÈëÖµÕ»µÄ¶¥²¿.
-
-
-
-ÊôÐÔÃû ±ØÐè ÃèÊö
-
-value ÊÇ ÓÃÓÚÏò±êÇ©´«µÝÊý¾Ý.
-
-
Óëww:set(¼ûÏÂÎÄ)±êÇ©µÄ¹¦ÄÜÀàËÆ, Òò´ËÔÚ¾ö¶¨Ê¹ÓÃǰӦµ±¶¼¿´Ò»ÏÂ.
-
<ww:push value="counter" >
<ww:property value="count" />
</ww:push>
-
Òª½«Ò»¸ö»î¶¯·ÅÈëÖµÕ»ÖпÉÒÔʹÓÃÏÂÃæµÄ´úÂë:
-
<ww:action name="'SomeAction'" id="sa" />
<ww:push value="#sa" >
foo = <ww:property value="foo" />
</ww:push>
-
-
-
-·µ»Ø
-
ʹÓÃww:set±êÇ©, Äã¿ÉÒÔÔÚJSPÖд´½¨Ò»¸ö×Ô¼ºÃüÃû±äÁ¿. ¿ÉÒÔʹÓÃ#variableNameµÄÐÎʽÒýÓøñäÁ¿.
-
-
-
-ÊôÐÔÃû ±ØÐè ÃèÊö
-
-name ÊÇ ±äÁ¿µÄΨһÃû³Æ, ¿ÉÒÔʹÓÃ"#name"·ÃÎÊËü.
-
-value ·ñ ÓÃÓÚÏò±êÇ©´«µÝÊý¾Ý.
-
-scope ·ñ ±äÁ¿µÄ×÷Ó÷¶Î§: ¿ÉÒÔÊÇpage, request, session, application
-
-
-½«ÖµÕ»ÖжÔÏóµÄÖµÉèÖõ½Ö¸¶¨µÄscopeÖÐ. Èç¹ûֵδ¸ø¶¨, ½«Ê¹ÓÃÕ»¶¥Öµ. Èç¹ûscopeδָ¶¨, ȱʡµÄscopeÊǻÉÏÏÂÎÄ, Èç¹û¸ÃÇëÇó²¢Î´Ö´ÐÐÈκλ, ½«Ê¹ÓÃPageContext.
-
-·µ»Ø
-
-Action±êÇ©ÌṩÁíÒ»ÖÖµ÷ÓûµÄ·½·¨. ÕâÊdzýÁ˵÷ÓÃÒ»¸öURLÖ®ÍâµÄÁíÒ»¸ö°ì·¨; ¼´ - *.action»á±»·¢Ë͵½ServletDispatcher.
-
-ÊôÐÔÃû ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-name ÊÇ ±»µ÷ÓûµÄÃû×Ö.
-
-namespace ·ñ »î¶¯µÄÃû¿Õ¼ä
-
-executeResult ·ñ ÊÇ·ñÖ´Ðнá¹û
-
-
Èç¹ûÖ¸¶¨ÁËid ÊôÐÔ, ±»Ö´ÐеĻ¾Í¿ÉÒÔʹÓÃ"#id "ÔڻÉÏÏÂÎÄÖÐÒýÓÃ.
±¾ÀýÖÐ, »î¶¯ClientInfo½«±»Ö´ÐÐ, ËüµÄ·½·¨½«±»ÓÃÓÚ»ñÈ¡ÐÅÏ¢²¢Ö´ÐÐÌõ¼þ¼ì²é.
-
-
-
<ww:action name="'ClientInfo'" id="cinfo" >
<ww:param name="detailedMode" value="false" />
</ww:action>
Browser:<ww:property value="#cinfo.browser" /> <br>
Version:<ww:property value="#cinfo.version" /> <br>
Supports GIF:<ww:if test="#cinfo.supportsType('image/gif') == true" > Yes</ww:if>
<ww:else> No</ww:else> <br>
-
·µ»Ø
-
-
´´½¨Ò»¸öJavaBean²¢³õʼ»¯ËüµÄÊôÐÔ, ²¢½«Ëü·ÅÈëActionContext.
-
-
-ÊôÐÔÃû ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-name ÊÇ ±»µ÷ÓõĻ[¿ÉÄÜÊDZÊÎó ]Ãû.
-
-
-±¾ÀýÖÐ, Counter±»ÓÃ×÷bean. ÎÒÃÇ¿ÉÒÔµ÷ÓÃÐèÒªµÄ·½·¨. ±¾ÀýÖÐ,ÎÒÃǵ÷ÓÃsetFirst()½«³öÉúÄêÉèÖÃΪ1975²¢µ÷ÓÃsetLast()½«ËüÉèÖÃΪ2000. È»ºó½«Counter×÷Ϊһ¸öµü´úÆ÷ÏÔʾһ¸ö×éºÏ¿ò(combo box).
-
-
-
<ww:bean name="'webwork.util.Counter'" id="year" >
<ww:param name="'first'" value="text('firstBirthYear')" />
<ww:param name="'last'" value="2000" />
<ui:combobox label="'Birth year'" size="6" maxlength="4" name="'birthYear'" list="#year" />
</ww:bean>
-
-·µ»Ø
-
-
ÓÃÓÚ°üº¬ÁíÒ»¸öÒ³Ãæ»ò»î¶¯.
-
-
-
-ÊôÐÔÃû ±ØÐè ÃèÊö
-
-page ·ñ Ò³Ãæ»ò»î¶¯µÄÃû³Æ.
-
-value ·ñ ÓÃÓÚÏò±êÇ©´«µÝÊý¾Ý.
-
-
±¾ÀýÖÐ, beaninfo.jspÒýÈëÁËÒ»¸öPerson¶ÔÏópeople[0]. ¿´Ò»ÏÂbeaninfo.jspµÄÀý×Ó²¢×¢ÒâËüÊÇÈçºÎÀûÓÃ".."´ÓÖµÕ»ÖÐÈ¡³ö¸¸Ò³ÃæµÄÖµ.
-
-
<ww:property value="people[0]" >
<ww:include value="'beaninfo.jsp'" />
</ww:property>
-
±¾ÀýÖе÷ÓÃÁËÒ»¸ö»î¶¯.
-
-
<h1>RSS viewer</h1>
<ww:include value="'rss.viewer.action'" />
-
-
-
·µ»Ø
-
-
-¸ù¾ÝÌõ¼þ¾ö¶¨Óï¾äÊÇ·ñÖ´ÐÐ.
-
-
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-test ÊÇ ÓÉWebWork½âÎöÆ÷½øÐмÆË㸳ֵµÄÌõ¼þ±í´ïʽ. Ëü·µ»Ø²¼¶ûÖµtrue»òfalse.
-
-
-±¾ÀýÖÐ, Èç¹û²âÊÔÌõ¼þΪtrue½«Ö´ÐбêÇ©ÄÚÈÝ(body). elseIf±êÇ©ºÍelse±êÇ©½«²»±»Ö´ÐÐ.
-
-
-
<ww:if test="true == true " >
<b>if : Success</b>
</ww:if >
<ww:elseIf test="true == true " >
<b>elseIf: Failure</b>
</ww:elseIf>
<ww:else >
<b>else : Failure</b>
</ww:else >
-
return to top
-
-
µ±Ç°Ò»¸ö²âÊÔʧ°ÜºóÓÃÓÚ¾ö¶¨Óï¾äÊÇ·ñÖ´ÐÐ.
-
-
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-test ÊÇ ÓÉWebWork½âÎöÆ÷½øÐмÆË㸳ֵµÄÌõ¼þ±í´ïʽ. Ëü·µ»Ø²¼¶ûÖµtrue»òfalse.
-
-
±¾ÀýÖÐ, ÓÉÓÚelseIf±êÇ©µÄÌõ¼þΪtrue¶øif±êÇ©µÄÌõ¼þΪfalse, Òò´Ë½«Ö´ÐÐÆäÄÚÈÝ(body).
-
<ww:if test="true == false " >
<b>if : Failures</b>
</ww:if >
<ww:elseIf test="true == true " >
<b>elseIf: Success</b>
</ww:elseIf>
<ww:else >
<b>else : Failure</b>
</ww:else >
-
return to top
-
-
Èç¹ûǰһ¸ö²âÊÔΪfalseʱִÐÐ.
-
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-
-±¾ÀýÖÐ, ÓÉÓÚif±êÇ©ºÍelseIf±êÇ©µÄÌõ¼þ¾ùΪfalse, else±êÇ©½«Ö´ÐÐÆäÄÚÈÝ(body).
-
-
-
<ww:if test="true == false " >
<b>if : Failures</b>
</ww:if >
<ww:elseIf test="true == false " >
<b>elseIf: Failure</b>
</ww:elseIf>
<ww:else >
<b>else : Success</b>
</ww:else >
-
-
·µ»Ø
-
-
-Iterator±êÇ©½«ÔÚÒ»¸ö¼¯ºÏÖ®ÉϽøÐеü´ú. ¿Éµü´úµÄÖµ¿ÉÒÔÊÇÏÂÁÐÖ®Ò»: java.util.Collection, java.util.Iterator, java.util.Enumeration, java.util.Map, Êý×é, XML½Úµã »òXMLµÄNodeList.
-
-ÊôÐÔÃû ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-status ·ñ ¸ÃÊôÐÔ±íʾIteratorStatus¶ÔÏ󽫱»±©Â¶(exposed)³öÀ´²¢ÒÔ´ËÃüÃû. ʹÓÃIteratorStatus¶ÔÏó¿ÉÒÔ»ñÈ¡µü´úÐÅÏ¢: getCount(), getIndex(), isFirst(), isLast(), isEven(), isOdd().
-
-value ·ñ ÓÃÓÚÏò±êÇ©´«µÝÊý¾Ý.
-
-
-±¾ÀýÖÐ, iterator±êÇ©½«ÔÚCounterÉϽøÐеü´ú. property±êÇ©½«Êä³ö´Ó1µ½10µÄµü´úÖµ.
-
-
-
<ww:bean name="'webwork.util.Counter'" >
<ww:param name="'last'" value="10" />
<ww:iterator>
<ww:property/><br />
</ww:iterator>
</ww:bean>
-
±¾ÀýÖÐ, ÎÒÃÇʹÓÃÒ»¶ÔIteratorStatusÒԲ鿴µü´úÖеÄλÖÃ.
-
<h1>Testing iterator status</h1>
<ww:bean name="'webwork.util.Counter'" id="rowcounter" >
<ww:param name="'first'" value="0" />
<ww:param name="'last'" value="5" />
</ww:bean>
<table border="1" >
<ww:iterator value="#rowcounter" status="rowstatus" >
<tr>
<ww:bean name="'webwork.util.Counter'" id="colcounter" >
<ww:param name="'first'" value="0" />
<ww:param name="'last'" value="5" />
</ww:bean>
<ww:iterator value="#colcounter" status="colstatus" >
<!--
if it is (first row) or (first column) or (last row) then
output the column number.
-->
<ww:if test="#rowstatus.first==true || #colstatus.first==true || #rowstatus.last==true " >
<th><ww:property value="#colstatus.count" /></th>
</ww:if >
<ww:else >
<td><ww:property/></td>
</ww:else >
</ww:iterator>
</tr>
</ww:iterator>
</table>
-
ÕâÀïÎÒÃÇÀûÓÃIteratorStatusÍê³É¸ôÐмÓÈëÒ»¸ö¶îÍâµÄ»»ÐÐ. ÕâÔÚ»æÖƸôÐв»Í¬µÄµ×É«µÄHTML±í¸ñʱʮ·ÖÓÐÓÃ. ÆæÊýºÍżÊýÊôÐԾݿÉʹÓÃ.
-
<ww:iterator status="status" >
<ww:if test="#status.odd == true " > <br /> </ww:if >
<br />
</ww:iterator>
Here we use the IteratorStatus determine every fourth row to insert an extra line break .
<ww:iterator status="status" >
<ww:if test="#status.modulus(4) == 0" > <br /> </ww:if >
<br />
</ww:iterator>
-
ÏÂÃæÁгöIteratorStatus¶ÔÏó¿ÉÓõIJÙ×÷:
-
- even : boolean - Èç¹ûµ±Ç°µü´úλÖÃÊÇżÊý·µ»Øtrue
- odd : boolean - Èç¹ûµ±Ç°µü´úλÖÃÊÇÆæÊý·µ»Øtrue
- count : int - ·µ»Øµ±Ç°µü´úλÖõļÆÊý(´Ó1¿ªÊ¼)
- index : int - ·µ»Øµ±Ç°µü´úλÖõıàºÅ(´Ó0¿ªÊ¼)
- first : boolean - Èç¹ûµ±Ç°µü´úλÖÃÊǵÚһλʱ·µ»Øtrue
- last : boolean - Èç¹ûµ±Ç°µü´úλÖÃÊÇ×îºóһλʱ·µ»Øtrue
- modulus(operand : int) : int - ·µ»Øµ±Ç°¼ÆÊý(´Ó1¿ªÊ¼)ÓëÖ¸¶¨²Ù×÷ÊýµÄÄ£Êý
- ·µ»Ø
-
-ʹÓøø¶¨ÖµÉú³Éµü´úÆ÷(Iterator).
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-count ·ñ µü´úÖеÄÔªËØÊýÁ¿.
-
-separator ·ñ StringTokenizerÓÃÓÚ¶Ï×ÖµÄ×Ö·û.
-
-val ÊÇ ÓÃÓÚÉú³Éµü´úÁбíµÄ×Ö·û´®.
-
-
±¾ÀýÖд´½¨ÁËÁ½¸öµü´úÆ÷. Ò»¸öÊÇval="'foo,bar,xyzzy'" ÁíÒ»¸öÊÇval="' '".
-
<h1>Testing append, subset, and value generators</h1>
<table border="1" >
<ww:bean name="'webwork.util.Counter'" >
<ww:param name="'last'" value="5" />
<ww:iterator id="colcount" >
<tr>
<!--
Generator will create an Iterator that has 5 items.
The first 3 are "foo,bar,xyzzy" . Item 4 and 5 will be
foo and bar respectively. If the count is more than
the items, you start over.
-->
<ww:generator val="'foo,bar,xyzzy'" separator="','" count="#colcount" id="values" />
<!--
Generator will create an Iterator that has infinite
. Count=-1 means indefinite.
-->
<ww:generator val="' '" count="-1" id="space" />
<ww:append>
<ww:param name="'source'" value="#values" />
<ww:param name="'source'" value="#space" />
<ww:subset count="6" >
<ww:iterator>
<td width="40" ><ww:property/></td>
</ww:iterator>
</iterator:subset>
</iterator:append>
</tr>
</ww:iterator>
</ww:bean>
</table>
-
¸Ã±êǩĿǰÊǶàÓàµÄ, ¿ÉÒÔʹÓÃOGNLÀ´Íê³É:
-
-
<ww:iterator value="{1, 2, 3, 4}" >
</ww:iterator>
-
·µ»Ø
-
-Append±êÇ©ÓÃÓÚÌí¼ÓÒ»¸öµü´úÆ÷Áбí. µü´úµÄÖµ½«±»Ìí¼ÓÔÚÒ»Æð²¢×÷Ϊһ¸öµü´úÆ÷ʹÓÃ. ¸Ãµü´úÆ÷µÄÊä³ö˳ÐòÓëÌí¼Ó˳ÐòÒ»ÖÂ.
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-
±¾ÀýÖÐ, Ìí¼ÓÁËÁ½¸öµü´úÆ÷#valuesºÍ#spaces. ÕâÒâζ×Å#spacesµÄÖµÔÚ#valuesÖ®ºó.
-
<h1>Testing append, subset, and value generators</h1>
<table border="1" >
<ww:bean name="'webwork.util.Counter'" >
<ww:param name="'last'" value="5" />
<ww:iterator id="colcount" >
<tr>
<ww:generator val="'foo,bar,xyzzy'" separator="','" count="#colcount" id="values" />
<ww:generator val="' '" count="-1" id="space" />
<ww:append>
<ww:param name="'source'" value="#values" />
<ww:param name="'source'" value="#space" />
<ww:subset count="6" >
<ww:iterator>
<td width="40" ><ww:property/></td>
</ww:iterator>
</iterator:subset>
</iterator:append>
</tr>
</ww:iterator>
</ww:bean>
</table>
-
·µ»Ø
-
-
Subset±êÇ©½öµü´úsourceµÄÒ»²¿·Ö. Ëü´ÓÆðµã¿ªÊ¼²¢½øÐÐcountÖ¸¶¨µÄµü´ú´ÎÊý. Èç¹ûÄãÏëµü´úµ½×îºó, ¿ÉÒÔ½«countÉèÖÃΪ-1. Èç¹û²»ÌṩsourceÊôÐÔ, ½«Ê¹ÓÃÖµÕ»µÄµ±Ç°¶ÔÏó- ".".
-
-
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-count ·ñ Ö¸¶¨µü´ú´ÎÊý.
-
-source ·ñ Ö¸¶¨±¾±êÇ©²Ù×÷µÄµü´úÆ÷. ¿ÉÒÔÊÇEnumeration, Iterator, »òCollection.
-
-start ·ñ Ö¸¶¨¿ªÊ¼µü´úµÄλÖÃ.
-
-
±¾ÀýÖÐ, subset±êÇ©½«¶ÔÖµÕ»Öе±Ç°¶ÔÏóµÄ6¸öÔªËØ½øÐеü´ú.
-
<h1>Testing append, subset, and value generators</h1>
<table border="1" >
<ww:bean name="'webwork.util.Counter'" >
<ww:param name="'last'" value="5" />
<ww:iterator id="colcount" >
<tr>
<ww:generator val="'foo,bar,xyzzy'" separator="','" count="#colcount" id="values" />
<ww:generator val="' '" count="-1" id="space" />
<ww:append>
<ww:param name="'source'" value="#values" />
<ww:param name="'source'" value="#space" />
<ww:subset count="6" >
<ww:iterator>
<td width="40" ><ww:property/></td>
</ww:iterator>
</iterator:subset>
</iterator:append>
</tr>
</ww:iterator>
</ww:bean>
</table>
-
·µ»Ø
-
-
½«¼¸¸öµü´úÆ÷ºÏ²¢ÎªÒ»¸ö. ¸Ã±êÇ©½«ÕâЩµü´úÆ÷½»Ö¯ÔÚÒ»Æð. If one iterator runs out, it will drop off and the others will continue weaving until there are no more values.
-
-
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-
±¾ÀýÖÐ, #foo, #bar, and #xyzzy±»ºÏ²¢ÔÚÒ»Æð. Òò´Ë, Êä³ö˳ÐòÊÇfoo, bar, xyzzy until #foo #xyzzy iterators run out in which case #bar will finish.
-
Three value generators with merge and subset limits:<br>
<ww:generator val="'foo'" count="5" id="foo" />
<ww:generator val="'bar'" count="10" id="bar" />
<ww:generator val="'xyzzy'" count="5" id="xyzzy" />
<ww:merge>
<ww:param name="'source'" value="#foo" />
<ww:param name="'source'" value="#bar" />
<ww:param name="'source'" value="#xyzzy" />
<ww:subset count="30" >
<ww:iterator status="status" >
<ww:property value="#status.count" />:<ww:property/><br>
</ww:iterator>
</iterator:subset>
</iterator:merge>
-
·µ»Ø
-
-
Sort¿ÉÒÔ¶ÔÒ»¸öµü´úÆ÷½øÐÐÅÅÐò. ËüʹÓÃÄãÌṩµÄ±È½ÏÆ÷(Comparator)½øÐбȽÏ, ʹÓÃCollections.sort()·½·¨½øÐÐÅÅÐò.
-
-
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-id ·ñ ÎªÔªËØÖ¸¶¨Î¨Ò»Ãû³Æ(×¢Òâ ).
-
-comparator ÊÇ ÓÃÓÚ¼¯ºÏÅÅÐòµÄCompartor.
-
-source ·ñ Ö¸¶¨±¾±êÇ©²Ù×÷µÄµü´úÆ÷.¿ÉÒÔÊÇEnumeration, Iterator, »òCollection.
-
-
±¾Àý½øÐÐÉýÐòÅÅÐò.
-
<ww:bean name="'webwork.util.Counter'" id="counter" >
<ww:param name="'first'" value="0" />
<ww:param name="'last'" value="5" />
</ww:bean>
<ww:bean name="'webwork.util.Sorter'" id="sorter" />
Ascending:<br />
<ww:sort source="#counter" comparator="#sorter.ascending" >
<ww:iterator>
<ww:property/><br />
</ww:iterator>
</iterator:sort>
-
±¾Àý½øÐнµÐòÅÅÐò.
-
<ww:bean name="'webwork.util.Sorter'" id="sorter" />
<ww:bean name="'webwork.util.Counter'" id="counter" >
<ww:param name="'first'" value="0" />
<ww:param name="'last'" value="5" />
</ww:bean>
Descending:<br>
<ww:sort source="#counter" comparator="#sorter.descending" >
<ww:iterator>
<ww:property/><br>
</ww:iterator>
</iterator:sort>
-
±¾Àý½øÐÐ×Ö·û´®ÉýÐòÅÅÐò.
-
<ww:bean name="'webwork.util.Sorter'" id="sorter" />
Sorting strings:<br>
<ww:generator val="'Rickard,Maurice,Hristo'" separator="','" id="names" />
<ww:sort source="#names" comparator="#sorter.ascending" >
<ww:iterator>
<ww:property/><br>
</ww:iterator>
</iterator:sort>
-
-
- Id ÊôÐÔ"id"ÎªÔªËØÖ¸¶¨Ãû×Ö. ¸ÃÃû³ÆÔÚÕû¸öÎĵµÖбØÐëÊÇΨһµÄ. ¸ÃÊôÐÔÊÇÓÉTagSupportÌṩµÄ, Òò´ËÓÀÔ¶ÊÇÒ»¸ö×Ö·û´®. ²»ÐèÒªÏñÆäËûWebWork±êÇ©ÄÇÑùʹÓÃ×Ö·û´®ÎÄ·¨(string literal); Ò²¾ÍÊÇ˵ - id="'age'". Äã¿ÉÒÔÖ±½ÓʹÓÃid="age".
- ±ØÐè×¢ÒâµÄÊÇËùÓн«Ä³Ð©Öµ±£´æÔÚÖµÕ»µÄ±êÇ©(Èçi18n»òbean)¶¼½«ÔÚ±êÇ©½áÊøÊ±´ÓÖµÕ»Öн«ËüÃÇɾ³ý.
-Òò´Ë, Èç¹ûÄãÓÃbean±êǩʵÀý»¯Ò»¸öbean(<ww:bean name="'br.univap.fcc.sgpw.util.FormattersHelper'">), ¸Ãbean½öÔÚ</ww:bean>±êǩ֮ǰ²ÅÄÜÔÚÖµÕ»ÖзÃÎÊ.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/OGNL Basics.html b/docs/chinese/wikidocs/OGNL Basics.html
deleted file mode 100644
index 95a509ace..000000000
--- a/docs/chinese/wikidocs/OGNL Basics.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- WebWork 2 : OGNL»ù´¡
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 17, 2004 by casey .
-
-
-
-XWork»ùÓÚOGNL²¢Ôö¼ÓµÄ×î´ó¹¦ÄÜÊÇÖ§³ÖÖµÕ». OGNL¼Ù¶¨Ö»ÓÐÒ»¸ö"¸ù(root)", ¶øXWorkÖµÕ»µÄ¸ÅÄîÖ§³Ö¶à¸ö"¸ù".ÀýÈç, ¼ÙÉèÎÒÃÇʹÓñê×¼OGNL(²»ÓÃXWork), ÔÚOgnlContext±íÖÐÓÐÁ½¸ö¶ÔÏó: "foo" -> fooºÍ"bar" -> bar, ²¢ÇÒfoo±»ÉèÖÃΪ¸ù ¶ÔÏó. ÏÂÁдúÂëÃèÊöOGNLÈçºÎ´¦ÀíÏÂÁÐÈýÖÖÇé¿ö:
-
-
-
#foo.blah // returns foo.getBlah()
#bar.blah // returns bar.getBlah()
blah // returns foo.getBlah() because foo is the root
-
ÕâÒâζ×ÅOGNLÔÊÐíÉÏÏÂÎÄÖаüº¬¶à¸ö¶ÔÏó, µ«³ý·ÇÄãÒª·ÃÎʵĶÔÏóÊǸù, ÆäËû·ÃÎʱØÐë¼ÓÉÏÃû¿Õ¼äÈç, @bar. ÏÖÔÚÎÒÃÇÀ´ÌÖÂÛXWorkµÄÒ»µãÇø±ð…
ÔÚXWorkÖÐ, Õû¸öÖµÕ»ÊÇÉÏÏÂÎÄÖеĸù¶ÔÏó. µ«Èç¹ûÄãÏò´ÓÕ»ÖлñÈ¡¶ÔÏó»òÊÇÓÃËüÃǵÄÊôÐÔ, Äã²¢²»ÐèÒªÕë¶ÔÖµÕ»±àд±í´ïʽ(Èç: peek().blah), XWorkÓÐÒ»¸öÌØÊâµÄOGNL PropertyAccessorËü½«×Ô¶¯ËÑË÷Õû¸öÖµÕ»(×ÔÉ϶øÏÂ)ÖªµÀÕÒµ½¾ßÓÐÄãÒª²éÕÒµÄÊôÐԵĶÔÏóΪֹ.ÀýÈç, ¼ÙÉèÕ»ÖÐÓÐÁ½¸ö¶ÔÏó: AnimalºÍPerson. À´¸ö¶ÔÏó¶¼ÓÐ"name"ÊôÐÔ, AnimalÓÐÒ»¸ö"species"ÊôÐÔ, PersonÓÐÒ»¸ö"salary"ÊôÐÔ. AnimalÔÚÕ»¶¥, PersonÔÚËüÏÂÃæ. ÏÂÃæµÄ´úÂëÆ¬¶ÏÓÐÖúÓÚÄãÁ˽â»á·¢Éúʲô:
-
species // call to animal.getSpecies()
salary // call to person.getSalary()
name // call to animal.getName() because animal is on the top
-
ÔÚ×îºóÒ»¸öÀý×ÓÖÐ, Á½¸ö¶ÔÏó¶¼ÓÐnameÊôÐÔ, Òò´Ë·µ»ØÁËanimalµÄname. ͨ³£Õâ¾ÍÊÇÆÚÍûµÄЧ¹û, µ«ÓÐʱÄãÐèҪʹÓõͲã¶ÔÏóµÄÊôÐÔ. Ϊ´Ë, XWorkÖ§³ÖÖµÕ»Ë÷Òý. Äã½öÐèÒª±àд:
-
[0].name // call to animal.getName()
[1].name // call to person.getName()
-
OGNLÖ§³Ö¶Ô¾²Ì¬·½·¨ºÍÊôÐԵķÃÎÊ. ÕýÈçOGNLÎĵµÖ¸³öµÄ, ¿ÉÒÔʹÓÃÏÂÁдúÂëÏÔʽµ÷Óþ²Ì¬ÄÚÈÝ:
-
-
-
@some.package.ClassName@FOO_PROPERTY
@some.package.ClassName@someMethod()
-
È»¶ø, XWork²»ÐèÒªÖ¸¶¨»î¶¯ÀàµÄÍêÕû°üÃû¶øÊÇÓÃ"vs"ǰ׺:
-
@vs@FOO_PROPERTY
@vs@someMethod()
@vs1@FOO_PROPERTY
@vs1@someMethod()
@vs2@BAR_PROPERTY
@vs2@someOtherMethod()
-
"vs"¾ÍÊÇ"value stack". ÐèҪעÒâµÄÊÇÈç¹ûÄãʹÓÃ"vs"¶ø²»Ö¸¶¨ÀàÃû, ½«Ê¹ÓÃÕ»¶¥¶ÔÏóÀà. Èç¹ûÄãÔÚ"vs"ºóÔö¼ÓÊý×Ö, ½«Ê¹ÓÃÕ»ÖиüµÍ²ãµÄ¶ÔÏó.
-³ýÁËÉÏÃæµÄÀý×ÓºÍÃèÊöÒÔÍâ, »¹Óм¸¸öÖ÷񻂿±ð. ×î´óµÄÇø±ðÊÇÊôÐÔ²»ÔÙʹÓÃ'/'·ÃÎʶøÊÇÓÃ'.'. ÁíÍâ, ²»ÔÙʹÓÃ".."ÏòϱéÀúÖµÕ», ĿǰʹÓÃ"[n]", nÊÇÒ»¸öÊý×Ö. ×îºó, ÔÚWebWork 1.xÖпÉÒÔʹÓÃ"@foo"·ÃÎÊÌØÊâÃüÃû¶ÔÏó, µ«ÏÖÔÚÌØÊâ±äÁ¿Ê¹ÓÃ"#foo"·ÃÎÊ. ÎÞÂÛÈçºÎ, ×îÖØÒªµÄÊÇ"#foo"²»ÄÜ·ÃÎÊÇëÇóÊôÐÔ. ÒòΪXWork²»½öÊÇΪWeb¶ø´´½¨, Òò´ËûÓÐ"ÇëÇóÊôÐÔ"µÄ¸ÅÄî, Òò´Ë"#foo"½ö½öÊÇÇëÇóOgnlContextÖзǸù¶ÔÏóµÄ±í´ïʽ.
-
-Old Expression New Expression foo/blah foo.blah foo/someMethod() foo.someMethod() ../bar/blah [1].bar.blah @baz ²»Ö±½ÓÖ§³Ö1, µ«#bazÓëÖ®ÀàËÆ . top or [0]
-
-Ãû×Ö Öµ #parameters['foo'] or #parameters.foo request parameter ['foo'] (request.getParameter()) #request['foo'] or #request.foo request attribute ['foo'] (request.getAttribute()) #session['foo'] or #session.foo session attribute 'foo' #application['foo'] or #application.foo ServletContext attributes 'foo' #attr['foo'] or #attr.foo Access to PageContext if available, otherwise searches request/session/application respectively
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/OGNL.html b/docs/chinese/wikidocs/OGNL.html
deleted file mode 100644
index 8bddd9293..000000000
--- a/docs/chinese/wikidocs/OGNL.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
- WebWork 2 : OGNL
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
OGNL¾ÍÊÇObject Graph Navigation Language - Çë·ÃÎÊhttp://www.ognl.org ²é¿´OGNLÍêÕûÎĵµ. ±¾ÎÄÖÐÎÒÃǽöչʾ¼¸¸öÓëWebWork¹²´æµÄOGNLÌØÐÔ.
-
-WebworkʹÓñê×¼ÃüÃûÉÏÏÂÎÄ(namming context)ÔËËãOGNL±í´ïʽ. OGNL´¦ÀíµÄ¶¨¼¶¶ÔÏóÊÇÒ»¸ömap(ͨ³£±»³ÆÎªcontext map). OGNLÓÐÒ»¸ö¸ù¶ÔÏóµÄ¸ÅÄî (ÔÚwebworkÊõÓïÖÐ, ¾ÍÊÇOGNLValueStack). ÆäËû¶ÔÏóºÍ¸ù¶ÔÏóÒ»Æð·ÅÖÃÔÚcontext map(¼ò³Æcontext)ÖÐ, °üÀ¨session/application/requestÊôÐÔ. ÕâЩ¶ÔÏóºÍ¸ù¶ÔÏóûÓйØÏµ, Ö»ÊÇ˳Ðò´æÔÚÓÚcontext mapÖÐ. Òò´Ë, Ϊ·ÃÎÊÕâЩ¶ÔÏóÐèÒª ʹÓÃ#¸æËßognl²»ÒªÔÚ¸ù¶ÔÏóÖвéÕÒ, ¶øÓ¦µ±ÔÚÆäËûcontextÖвéÕÒ
-
-
|
|--request
|
|--application
|
context map---|--OgnlValueStack(root)
|
|--session
|
|--attr
|
|--parameters
-
N×¢Òâcontext mapÖл¹ÓÐÆäËû¶ÔÏó, ±¾ÀýÖнöÒýÓÃÁËÒ»²¿·Ö. ÏÖÔÚ, »î¶¯¶ÔÏó±»·ÅÈëOGNLValueStackÒò´Ë¿ÉÒÔ²»Ê¹ÓÃ#·ÃÎÊËüµÄÊôÐÔ.
-
-
<ww: property value="myBean.myProperty" />
-
Òª·ÃÎÊsession, requestºÍÆäËû¶ÔÏó:
-
-
ActionContext.getContext().getSession().put("mySessionPropKey" , mySessionObject);
-
-
-
<ww: property value="#session.mySessionPropKey" /> or
<ww: property value="#session['mySessionPropKey']" />
<ww: property value="#attr.mySessionPropKey" />
-
-ÔÚWebWorkÖо³£Òª´¦Àí¼¯ºÏ(maps, lists, sets), Òò´ËÏÂÃæÊǼ¸¸öʹÓÃselect±êÇ©µÄÀý×Ó:
-listµÄÓï·¨: {e1,e2}. Ëü´´½¨Ò»¸öList, °üº¬×Ö·û´®"name1"ºÍ"name2".
-
-
<webwork:select label="'lebal'" name="'nmae'" list="{'name1','name2'}" />
-
-mapµÄÓï·¨: #{key1:value1,key2:value2}. Ëü´´½¨Ò»¸öMap, ½«"foo"Ó³Éäµ½"foovalue", "bar"Ó³Éäµ½"barvalue":
-
-
<webwork:select label="'lebal'" name="'nmae'" list="#{'foo':'foovalue', 'bar':'barvalue'}" />
-
ÓÐʱÐèÒªÅжÏÒ»¸öÔªËØÊÇ·ñ°üº¬ÔÚ¼¯ºÏÖÐ. ¿ÉÒÔʹÓÃÏÂÃæµÄ²Ù×÷in ºÍnot in
-
-
<ui:if test="'foo' in {'foo','bar'}" >
muhahaha
</ui:if>
<ui:else>
boo
</ui:else>
<ui:if test="'foo' not in {'foo','bar'}" >
muhahaha
</ui:if>
<ui:else>
boo
</ui:else>
-
Ñ¡Ôñ¼¯ºÏµÄÒ»¸ö×Ó¼¯(³ÆÎªÍ¶Ó°), ¿ÉÒÔÔÚ¼¯ºÏÖÐʹÓÃͨÅå·û(wildcard).
-
- ? - ËùÓÐÆ¥ÅäÑ¡ÔñÂß¼µÄÔªËØ
- ^ - µÚÒ»¸öÆ¥ÅäÑ¡ÔñÂß¼µÄÔªËØ
- $ - ×îºóÒ»¸öÆ¥ÅäÑ¡ÔñÂß¼µÄÔªËØ
-
-´Ó¶ÔÏóPersonÖлñÈ¡ÄÐÐÔÇ×ÊôµÄ×Ó¼¯:
-
-
person.relatives.{? #this.gender == 'male'}
-
-OGNLÖ§³Ö»ù±¾µÄlamba±í´ïʽÓï·¨¿ÉÒÔÓÃÀ´±àд¼òµ¥µÄº¯Êý.ÀýÈç:Äã¿ÉÄܲ»»áÏëµ½»áÔÚÊýѧ¿ÎÍâÔÚ¼ûµ½Õâ¸ö.
-·Æ²¨ÄÉÇÐ(Fibonacci)ÊýÁÐ: if n==0 return 0; elseif n==1 return 1; else return fib(n-2)+fib(n-1);
-fib(0) = 0
-fib(1) = 1
-fib(11) = 89
Lambda±í´ïʽµÄÈκÎÄÚÈݶ¼°üÀ¨ÔÚÀ¨ºÅÖÐ. #this±äÁ¿±£´æ±í´ïʽµÄ²ÎÊý, ËüµÄ³õʼֵÊÇ11.
-
-
-
<ww:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)" />
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Packages.html b/docs/chinese/wikidocs/Packages.html
deleted file mode 100644
index 055b6e572..000000000
--- a/docs/chinese/wikidocs/Packages.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
- WebWork 2 : °ü
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
-
ʹÓðü¿ÉÒÔ½«»î¶¯, ½á¹û, ½á¹ûÀàÐÍ, ½ØÈ¡Æ÷ºÍÕ»×éºÏΪһ¸öÂß¼µ¥ÔªµÄ²¢Ê¹ËüÃǹ²ÏíͨÓÃÅäÖÃ. °üºÍ¶ÔÏóÀàËÆ, ×Ó°üÒ²¿ÉÒÔÀ©Õ¹²¢¸²¸Ç¸¸°üµÄijЩ²¿·Ö.
packageÔªËØÓÐÒ»¸ö±ØÐèÊôÐÔ"name", Ëü×÷ΪºóÃæÒýÓøðüµÄ¼üÖµ. "extends"ÊôÐÔÊÇ¿ÉÑ¡µÄ, ÔÊÐíÒ»¸ö°ü¼Ì³Ðǰһ¸ö»ò¼¸¸ö°üµÄÅäÖÃÐÅÏ¢, °üÀ¨ËùÓеĽØÈ¡Æ÷, ½ØÈ¡Æ÷Õ», ºÍ»î¶¯. ÐèҪעÒâµÄÊÇ, ÅäÖÃÎļþÊÇ´ÓÉϵ½ÏÂ˳Ðò½øÐд¦ÀíµÄ, Òò´Ë±»ÆäËû°üÒýÓõİüÓ¦µ±¶¨ÒåÔÚÇ°Ãæ. "abstract"¿ÉÑ¡ÊôÐÔÓÃÀ´´´½¨Ò»¸ö³éÏó°ü, À©Õ¹¸Ã°üʱ²»°üº¬ÆäÖеĻÅäÖÃ.
-
-
-
- ÊôÐÔ ±ØÐè ÃèÊö
-
- name ÊÇ ÆäËû°üÒýÓÃʱµÄ¼üÖµ
-
- extends ·ñ ´ÓÀ©Õ¹µÄ°üÖм̳Ð
-
- namespace ·ñ ²Î¼ûÃû¿Õ¼ä
-
- abstract ·ñ ÉùÃ÷Ϊ³éÏó°ü(°üÖв»ÐèÒª»î¶¯ÅäÖÃ)
-
-
-
-
-
<package name="bar" extends="webwork-default" namespace="/foo/bar" >
<interceptors>
<interceptor-stack name="barDefaultStack" >
<interceptor-ref name="debugStack" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="Bar" class="com.opensymphony.xwork.SimpleAction" >
<interceptor-ref name="barDefaultStack" />
</action>
<action name="TestInterceptorParamInheritance" class="com.opensymphony.xwork.SimpleAction" >
<interceptor-ref name="test" >
<param name="expectedFoo" > expectedFoo</param>
</interceptor-ref>
</action>
<action name="TestInterceptorParamInehritanceOverride" class="com.opensymphony.xwork.SimpleAction" >
<interceptor-ref name="test" >
<param name="foo" > foo123</param>
<param name="expectedFoo" > foo123</param>
</interceptor-ref>
</action>
</package>
<package name="abstractPackage" namespace="/abstract" abstract="true" >
<action name="test" class="com.opensymphony.xwork.SimpleAction" />
</package>
<package name="nonAbstractPackage" extends="abstractPackage" namespace="/nonAbstract" />
<package name="baz" extends="default" namespace="baz" >
<action name="commandTest" class="com.opensymphony.xwork.SimpleAction" >
<param name="foo" > 123</param>
<result name="error" type="chain" >
<param name="actionName" > bar</param>
</result>
<interceptor-ref name="static-params" />
</action>
<action name="myCommand" class="com.opensymphony.xwork.SimpleAction" method="commandMethod" >
<param name="bar" > 456</param>
<result name="success" type="chain" >
<param name="actionName" > foo</param>
</result>
<interceptor-ref name="logger" />
</action>
</package>
<package name="multipleInheritance" extends="default,abstractPackage,bar" namespace="multipleInheritance" >
<action name="testMultipleInheritance" class="com.opensymphony.xwork.SimpleAction" >
<result name="success" type="chain" >
<param name="actionName" > foo</param>
</result>
<interceptor-ref name="barDefaultStack" />
</action>
</package>
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Password tag.html b/docs/chinese/wikidocs/Password tag.html
deleted file mode 100644
index 558e6b11e..000000000
--- a/docs/chinese/wikidocs/Password tag.html
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
- WebWork 2 : Password±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
ÀàÐÍΪpasswordµÄINPUT±êÇ©.±¾ÀýÖÐÏÔʾһ¸öpassword¿Ø¼þ. ͨ¹ýµ÷ÓÃActionSupportµÄgetText()·½·¨´ÓResourceBundleÖÐÌáÈ¡Îı¾×÷ΪÆä±êÇ©.
-
-
<ww:password label="text('password')" name="'password'" size="10" maxlength="15" />
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ Îı¾Öµ
-
- size ·ñ HTMLµÄsizeÊôÐÔ
-
- maxlength ·ñ HTMLµÄmaxlengthÊôÐÔ
-
- disabled ·ñ HTMLµÄdisabledÊôÐÔ
-
- readonly ·ñ HTMLµÄreadonlyÊôÐÔ
-
- onkeyup ·ñ HTMLµÄonkeyupÊôÐÔ
-
- tabindex ·ñ HTMLµÄtabindexÊôÐÔ
-
- onchange ·ñ HTMLµÄonchangeÊôÐÔ
-
- onclick ·ñ HTMLµÄonclickÊôÐÔ
-
- show ·ñ ÊÇ·ñÏÔʾÃÜÂëÖµ(Éæ¼°°²È«ÐÔ)
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Pico.html b/docs/chinese/wikidocs/Pico.html
deleted file mode 100644
index 4dd1cd9cd..000000000
--- a/docs/chinese/wikidocs/Pico.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : Pico
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
- Pico is an Inversion of Control container available at http://picocontainer.codehaus.org. There have been several reports of integration between WebWork and Pico. We recommend that you build your own ObjectFactory to do this integration.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Previous releases.html b/docs/chinese/wikidocs/Previous releases.html
deleted file mode 100644
index 67e896516..000000000
--- a/docs/chinese/wikidocs/Previous releases.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
- WebWork 2 : Previous releases
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-
-
-
- Release Notes
- Upgrading from previous versions
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Projects Using WebWork.html b/docs/chinese/wikidocs/Projects Using WebWork.html
deleted file mode 100644
index e80568bed..000000000
--- a/docs/chinese/wikidocs/Projects Using WebWork.html
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
- WebWork 2 : Projects Using WebWork
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 17, 2004 by mcampbell .
-
-
-
- Atlassian Confluence - Commercial Wiki and knowledge management system using WebWork 2.0, Hibernate, Spring, and Velocity
-
-
-
- DriveNow - last minute Autralian car rentals
-
-
- OpenReports - an open source web based reporting application that uses WebWork 2.0, Velocity, and Hibernate
-
-
- eSage Group is a consulting company that uses it for all their client engagements. Additionally, its used for their internal systems
-
-
-
- TeraMEDICA - WebWork is used in TeraMEDICA's commercial TI2m product, which performs intelligent image management for the healthcare enterprise. Specifically, WebWork is a key component of the system's management interface.
-
-
- EBIA COBRA and 401K Benefits Site provides law reviews for employee benefits like COBRA and 401K. The site moved from all struts to a current architecture of about 50% WebWork and 50% Struts. We are trying to move it all over to WebWork. This site is also a great example of porting from Tiles to SiteMesh.
-
-
- Midwinter - an open source rapid web application develop system using WebWork 2.0, Hibernate, Spring, and Velocity
-
-
- Valtira Rolecall - Identity Management Framework that provides single sign-on for J2EE and .NET web applications.
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Quartz.html b/docs/chinese/wikidocs/Quartz.html
deleted file mode 100644
index a5616fd8a..000000000
--- a/docs/chinese/wikidocs/Quartz.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- WebWork 2 : Quartz
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 10, 2004 by ctran .
-
-
- The following class performs the glue between Quartz and Webwork:
-
package com.trantek.sit.action;
import com.opensymphony.xwork.ActionProxy;
import com.opensymphony.xwork.ActionProxyFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class WebWorkJob implements Job
{
public void execute(JobExecutionContext context) throws JobExecutionException
{
try
{
ActionProxy proxy = ActionProxyFactory.getFactory().
createActionProxy("", context.getJobDetail().getName(), context.getJobDetail().getJobDataMap());
proxy.execute();
}
catch (Exception e)
{
throw new JobExecutionException(e);
}
}
}
-
To schedule webwork actions you simply create a job where
- the name of your job is the name of the WW action to execute (no ".action" suffix).
- all the parameters you want to send to the WW action is contained in the JobDataMap of the JobDetail
- (the Quartz scheduler is setup as a servlet according to the javadocs of org.quartz.ee.servlet.QuartzInitializerServlet.)
The following code schedules an e-mail action:
-
-
-
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail jobDetail = new JobDetail("email.send" ,
scheduler.DEFAULT_GROUP, WebworkJob.class);
Map m = jobDetail.getJobDataMap();
m.put("to" , "me@bogusdomain.com" );
m.put("subject" , "quartz test" );
m.put("body" , "This is a quartz test, Hey ho" );
m.put("smtpServer" , "smtp.bogusdomain.com" );
m.put("from" , "quartz@bogusdomain.com" );
SimpleTrigger trigger = new SimpleTrigger("myTrigger" ,
scheduler.DEFAULT_GROUP,
new Date(), null , 0, 0L);
scheduler.deleteJob("email.send" , scheduler.DEFAULT_GROUP);
scheduler.scheduleJob(jobDetail, trigger);
-
This example is based on WW1:Integrating Webwork and Quartz
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/QuickStart.html b/docs/chinese/wikidocs/QuickStart.html
deleted file mode 100644
index 0791148c7..000000000
--- a/docs/chinese/wikidocs/QuickStart.html
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
- WebWork 2 : QuickStart
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 08, 2004 by matthew .
-
-
- WebWork is a popular, easy-to-use MVC framework, for more information on the WebWork project, please visit WW:WebWork . This guide should be helpful to seasoned Java developers with previous experience in MVC frameworks. We will briefly cover the three main components on a WebWork2 based application, the configuration the action classes, and the views.
-To use WebWork as your framework for writing Java-based web applications, you need to start by installing the various libraries (these are all available in the webwork 2.x distribution ):
-
-
-
- jstl.jar (needed for Standard Tag Libraries)
- cos-multipart.jar
- pell-multipart.jar
- standard.jar
- mail.jar
-
-
-WebWork is built upon the Xwork framework. Xwork handles the translation requests to commands execution, but let's not worry about that right now. You need to know this information in case you were curious about the xwork JAR file, and if you want to learn some of the more advanced features of the WebWork command structure, you can visit the XW:XWork site.
-
-
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE web-app
PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name> WebWork 2.0 Quick Start</display-name>
<servlet>
<servlet-name> webwork</servlet-name>
<servlet-class> com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> webwork</servlet-name>
<url-pattern> *.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file> index.jsp</welcome-file>
<welcome-file> index.html</welcome-file>
</welcome-file-list>
<taglib>
<taglib-uri> webwork</taglib-uri>
<taglib-location> /WEB-INF/lib/webwork-2.1.5.jar</taglib-location>
</taglib>
</web-app>
-
-
-
<servlet-mapping>
<servlet-name> webwork</servlet-name>
<url-pattern> *.action</url-pattern>
</servlet-mapping>
-
-The above section will map ANY servlet called with an extension of .action to the WebWork base servlet, and assume it is a WebWork action class.
-
-
<taglib>
<taglib-uri> webwork</taglib-uri>
<taglib-location> /WEB-INF/lib/webwork-2.1.5.jar</taglib-location>
</taglib>
-
-The above section will load the standard WebWork tag libraries. This is required for JSP 1.1 compatible containers. To load more or different libraries, add more <taglib> calls.
-
-
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE xwork
PUBLIC
"-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<interceptors>
<interceptor name="security" class="com.acme.LoginCheck" />
<interceptor-ref name="defaultStack" />
</interceptors>
<default-interceptor-ref name="security" />
<action name="showForm" class="com.acme.FormAction" >
<result name="success" type="dispatcher" >
<param name="location" > /form.jsp</param>
</result>
</action>
<action name="saveForm" class="com.acme.FormAction" method="processForm" >
<result name="success" type="dispatcher" >
<param name="location" > /form.jsp</param>
</result>
<result name="missing-data" type="dispatcher" >
<param name="location" > /form.jsp</param>
</result>
<interceptor-ref name="security" />
</action>
</package>
</xwork>
-
-
-
<action name="saveForm" class="com.acme.FormAction" method="processForm" >
-
Actions are the basic "unit-of-work" in WebWork, they define, well, actions. An action will usually be a request, (and usually a button click, or form submit). The main action element (tag is too synonymous with JSP) has two parts, the friendly name (referenced in the URL, i.e. saveForm.action ) and the corresponding "handler" class.
The method parameter tells WebWork which method to call based upon this action. If you leave the method parameter blank, WebWork will call the method execute() from the Action Interface by default. Since every Action must implment the Action Interface, this method will always be available.
-
-
<result name="missing-data" type="dispatcher" >
<param name="location" > /form.jsp</param>
</result>
-
Result tags tell WebWork what to do next after the action has been called. There are a standard set of result codes built-in to WebWork, (in the Action interface) they include:
-
-
String SUCCESS = "success" ;
String NONE = "none" ;
String ERROR = "error" ;
String INPUT = "input" ;
String LOGIN = "login" ;
-
You can extend these as you see fit. Most of the time you will have either SUCCESS or ERROR , with SUCCESS moving on to the next page in your application;
-
-
<result name="success" type="dispatcher" >
<param name="location" > /thank_you.jsp</param>
</result>
-
…and ERROR moving on to an error page, or the preceding page;
-
-
<result name="error" type="dispatcher" >
<param name="location" > /error.jsp</param>
</result>
-
You can stack as many result tags within a single action tag as you wish.
For further reading on Result types, see WW:Result Types .
-
-Interceptors allow you to define code to be executed before and/or after the execution of an action. Interceptors can be a powerful tool when writing web applications. Some of the most common implementations of an Interceptor might be:
- Security Checking (ensuring the user is logged in)
- Trace Logging (logging every action)
- Bottleneck Checking (start a timer before and after every action, to check bottlenecks in your application)
-
-You can also group Interceptors together to create "stacks". If you wanted to do a login check, security check, and logging all before an Action call, this could easily be done with an interceptor stack.For further Reading on Interceptors, see XW:Interceptors
-For further Reading on Xwork configuration files, see XW:Configuration
-The action classes do what they say, they handle the action. They are called by the actions specified in the xwork.xml file and initiated by the user in the "views". To turn your class into an action class, you simply need to extend the class ActionSupport or implement the Action interface. Here is what our saveForm action looks like in its Java form (NOTE: If you look in the xwork.xml file above, we've overridden the action to call the processForm method):
-
package com.acme;
import com.opensymphony.xwork.*;
public class FormAction extends ActionSupport {
private FormBean myFormBean = new FormBean();
public void setFormBean(FormBean inBean) {
myFormBean = inBean;
}
public FormBean getFormBean() {
return myFormBean;
}
public String processForm() {
FormParameters formParams = this .getFormBean();
checkBizRules(formParams);
this .saveParamsToDb(formParams);
return SUCCESS;
}
...
}
-
-WebWork supports JSP, Velocity, and FreeMarker for your application presentation layer. For this example, we will use a JSP file. The appropriate presentation layer is denoted by the result type specified. For JSPs, the result type is the name mapped to the com.opensymphony.webwork.dispatcher.ServletDispatcherResult . Typically, this is "dispatcher".WebWork comes packaged with a tag library (taglibs). You can use these taglibs as components in your JSP file. Here is an section of our form.jsp page:
-
-
<%@ taglib prefix="ww" uri="webwork" %>
<html>
<head><title>Webwork Form Example</title></head>
<body>
<ww:form name="'myForm'" action="'saveForm.action'" method="'POST'" >
<table>
<ww:textfield label="'First Name'" name="'formBean.firstName'" value="formBean.firstName" />
<ww:textfield label="'Last Name'" name="'formBean.lastName'" value="formBean.lastName" />
</table>
<input type="submit" value="Save Form" />
</ww:form>
</body>
-
The process of events will go as follows:
-
- WebWork will take notice since the URI ends in .action (defined in our web.xml files)
- WebWork will look up the action saveForm in its action hierarchy and call any Interceptors that we might have defined.
- WebWork will translate saveForm and decide we would like to call the method processForm in our class com.acme.FormAction as defined in our xwork.xml file.
- Our method will process successfully and give WebWork the SUCCESS return parameter.
- WebWork will translate the SUCCESS return parameter into the location thank_you.jsp (as defined in xwork.xml ) and redirect us accordingly.
-
-
-The purpose of this guide is to provide the user with a quick-and-dirty understanding of WebWork2. I hope we successfully briefed you on the three most important components of any WebWork based application, the configuration (including web.xml and xwork.xml ), the action classes, and the views. This information should give you a starting point to experiment and become more familiar with the rising star of the open source, Model2, web frameworks.
-It is not necessary to map and load the WebWorkVelocityServlet in in the web.xml in order to use Velocity rendered pages. WebWork includes a built-in Velocity result type. Using the result type should be faster than sending the result to the servlet dispatcher which then delegates to the servlet mapping for WebWorkVelocityServlet.
-Originally by:
-Matt Dowell
-matt.dowell@notiva.com
-September 15, 2003
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Radio tag.html b/docs/chinese/wikidocs/Radio tag.html
deleted file mode 100644
index 7f01c3949..000000000
--- a/docs/chinese/wikidocs/Radio tag.html
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
- WebWork 2 : Radio±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
Ò»¸öHTMLµ¥Ñ¡°´Å¥UI×é¼þ±¾ÀýÖÐ, Ò»¸öÊý¾ÝÁÐ±í±»»æÖƳÉÒ»×鵥ѡ°´Å¥. The gender list is built from attribute ¸ù¾ÝÊôÐÔid=genders½¨Á¢ÐÔ±ðÁбí. WebWorkµ÷ÓÃgetGenders()·½·¨, ¸Ã·½·¨·µ»ØÒ»¸öMap.listKeyºÍlistValueÊôÐÔµÄÓ÷¨²Î¼ûselect±êÇ©.
-
-
<ww:action name="'GenderMap'" id="genders" />
<ww:radio label="'Gender'" name="'male'" list="#genders.genders" />
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×Ö¶ÎÖµ
-
- list ·ñ ÁбíʹÓõĿɵü´úÊý¾ÝÔ´
-
- listKey ·ñ Áбí¶ÔÏóµÄ¼üÖµÊôÐÔ
-
- listValue ·ñ Áбí¶ÔÏóµÄÄÚÈÝÊôÐÔ
-
- disabled ·ñ HTMLµÄdisabledÊôÐÔ
-
- tabindex ·ñ HTMLµÄtabindexÊôÐÔ
-
- onchange ·ñ HTMLµÄonchangeÊôÐÔ
-
- onclick ·ñ HTMLµÄonclickÊôÐÔ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Redirect Result.html b/docs/chinese/wikidocs/Redirect Result.html
deleted file mode 100644
index db93aaf0f..000000000
--- a/docs/chinese/wikidocs/Redirect Result.html
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
- WebWork 2 : Redirect Result
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
-
֪ͨä¯ÀÀÆ÷ÖØ¶¨Ïòµ½ÁíÒ»¸öλÖÃ(½«´Ó¿Í»§¶Ë·¢³öеÄÇëÇó). ÕâÒâζןղÅÖ´ÐеĻ(»î¶¯ÊµÀý, »î¶¯´íÎó, ×ֶδíÎóµÈ)½«¶ªÊ§²»ÔÙ¿ÉÓÃ. ÕâÊÇÒòΪ»î¶¯»ùÓÚµ¥Ïß³Ìģʽ. ´«µÝ²ÎÊýµÄΨһ°ì·¨ÊÇʹÓÃsession»òʹÓÃOGNL±í´ïʽ×÷Ϊweb²ÎÊý(url?name=value).
-
-
-
-²ÎÊý ±ØÐè ÃèÊö
-
- location ÊÇ Ö´ÐкóÌø×ªµÄλÖÃ
-
- parse ·ñ ȱʡΪtrue. Èç¹ûÉèΪfalse, location²ÎÊý½«²»×÷ΪOgnl±í´ïʽ½øÐнâÎö
-
-
-
-
<result name="success" type="redirect" >
<param name="location" > foo.jsp</param>
<param name="parse" > false</param>
</result>
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Release Notes - 2.1.1.html b/docs/chinese/wikidocs/Release Notes - 2.1.1.html
deleted file mode 100644
index ba1842149..000000000
--- a/docs/chinese/wikidocs/Release Notes - 2.1.1.html
+++ /dev/null
@@ -1,535 +0,0 @@
-
-
- WebWork 2 : Release Notes - 2.1.1
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-
- Improved integration with Sitemesh
- WebWork taglibs can be used in Sitemesh decorators to access Action properties
-
- Validator short-circuiting to allow validation to stop on first invalid data
- Improved class hierarchy resource bundle searching
- File upload support has been rebuilt to allow for multiple files with the same HTTP parameter name. Besides "cos" and "pell" support, "jakarta" support has been added, utilizing the Commons-FileUpload library. Only "jakarta" supports multiple files with the same HTTP parameter name. In future versions "jakarta" may become the default upload library, replacing "pell".
-
-
-
-
-
- Version Description Old Code New Code
-
- 2.1 There is a new validator DTD: xwork-validator-1.0.2.dtd. You aren't required to use this, but you will need to if you wish to use the new short-circuiting validation N/A N/A
-
- 2.1 File upload support has been rebuilt, although we don't see any compatibility problems with 2.1. However, many of the methods in MultiPartRequest have become deprecated in favor of new ones. Please switch to these as soon as possible. N/A N/A
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Release Notes - 2.1.2.html b/docs/chinese/wikidocs/Release Notes - 2.1.2.html
deleted file mode 100644
index f3787f87a..000000000
--- a/docs/chinese/wikidocs/Release Notes - 2.1.2.html
+++ /dev/null
@@ -1,215 +0,0 @@
-
-
- WebWork 2 : Release Notes - 2.1.2
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-
- This version ships with XWork 1.0.3 – we recommend you make sure you are running this version (or later) of XWork.
- Minor bug fixes for file upload support with Jakarta
- New StreamResult type which allows you to stream content directly back from an action
- UI tags may now be written in languages other than Velocity. JSP is supported, though you currently must write your own templates similar to the Velocity templates. Future versions of WebWork will include more languages supported as well as templates shippped out of the box.
-
-Migration should require nothing more than copying over the new libs. Specifically note that XWork 1.0.3 and WebWork 2.1.2 should be copied over.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Release Notes - 2.1.3.html b/docs/chinese/wikidocs/Release Notes - 2.1.3.html
deleted file mode 100644
index 403e9f029..000000000
--- a/docs/chinese/wikidocs/Release Notes - 2.1.3.html
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
- WebWork 2 : Release Notes - 2.1.3
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-WebWork version 2.1.3 resolves a critical problem preventing UI tags from working under certain circumstances. It is recommended that all users use 2.1.3 in place of 2.1.1 or 2.1.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Release Notes - 2.1.4.html b/docs/chinese/wikidocs/Release Notes - 2.1.4.html
deleted file mode 100644
index 27bb41578..000000000
--- a/docs/chinese/wikidocs/Release Notes - 2.1.4.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
- WebWork 2 : Release Notes - 2.1.4
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-This release is the first release to include the re-vamped JSP tag support. Specifically, there is an option (off by default) that now lets you use an alternative syntax for JSP tags.When webwork.tag.altSyntax is set to true in webwork.properties, all attributes in the JSP tags (both UI and non-UI) that evaluate to a String (as opposed to a Boolean, Integer, Collection, or anything else) shall not be evaluated like it normally is.
Rather, the string will be parsed for the pattern "%{...}" and only the text between those braces shall be evaluated. This should make using all the tags, but especially the UI tags, much easier. The only exception to this rule of parsing String attributes is for the <ww:property/> tag. That is because the usage for <ww:property/> is so commonly used for pulling values from the stack, enforcing the "%{..}" syntax on it would be overly tedious.
There is nothing to migrate for now. Because this new syntax is optional and turned off by default, you don't need to do anything to migrate as long as you don't plan to use this new syntax. If you DO plan to use this new syntax, you must modify all your tag attributes that previously had the pattern of "'...'" to just be "...". Basically, you must remove single quotes where they once were.
Also, any place where an attribute did not have single quotes, you must check to see if the attribute is expected to be a String attribute. If so, you should replace the pattern of "..." with "%{...}" so that the expression is still being evaluated.Note that attributes such as disabled, maxlength, etc do not need the new syntax. That is becaus the syntax is only applied to attributes that are expected to be strings . This is very important to remember!
Finally, please note that this release is a preview release for the new syntax. The new syntax will not be finalized and turned on by default until 2.2.0. You are free to use it, but it is not guaranteed to be stable and may change in the coming releases .
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Release Notes - 2.1.5.html b/docs/chinese/wikidocs/Release Notes - 2.1.5.html
deleted file mode 100644
index 8795fab20..000000000
--- a/docs/chinese/wikidocs/Release Notes - 2.1.5.html
+++ /dev/null
@@ -1,264 +0,0 @@
-
-
- WebWork 2 : Release Notes - 2.1.5
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-
- All UI tags now support the complete set of JavaScript event listeners now, such as onChange, onBlur, etc.
- ExecuteAndWaitInterceptor is easier to use
- Several important bug fixes for Velocity integration
-
-
- Version Description Old Code New Code
-
- 2.1.4 and below TLD updated – be sure you are using the latest webwork.tld file N/A N/A
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Release Notes - 2.1.6.html b/docs/chinese/wikidocs/Release Notes - 2.1.6.html
deleted file mode 100644
index c9733be6d..000000000
--- a/docs/chinese/wikidocs/Release Notes - 2.1.6.html
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
- WebWork 2 : Release Notes - 2.1.6
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-This release includes a few bug fixes for the URL tag, a new base class to make type conversion easier, and better documentation. It also includes the latest XWork release: version 1.0.4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Release Notes - 2.1.html b/docs/chinese/wikidocs/Release Notes - 2.1.html
deleted file mode 100644
index cffc3add8..000000000
--- a/docs/chinese/wikidocs/Release Notes - 2.1.html
+++ /dev/null
@@ -1,360 +0,0 @@
-
-
- WebWork 2 : Release Notes - 2.1
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
- JavaScript client validation support - not totally complete, but basic validators work well. Look at the validators.xml file include in src/example to see how you can configure your validators to do client side validation on top of their normal duties
- The label attribute in UI tags are no longer required
- The themes and templates in UI tags behave like they did in 1.x
- A new theme, in addition to the existing "xhtml" one, called "simple" is included that doesn't have any of the labels, error reporting, or table rows that the "xhtml" template has. This is more in line with the tags included with Struts.
- New UI tags for CSS styles and classes added: cssStyle and cssClass
- Old action!command URL support works again. This means you can invoke a doCommand() method like in 1.x
- ww:param tag no longer requires the name attribute (for ordered params, like with ww:text). It also evaluates the the body as the value if no value is given.
- UI tags now have access to the FormTag parameter map using the "form" key. This means $parameters.form.name would return the form name, for example. The result is that complex JavaScript-based components can be built.
-
-
-
-
-
- Version Description Old Code New Code
-
- 2.0 WebWorkUtil has been refactored into a number of classes, and the constructor has changed. If you were using it for Velocity support before, look at VelocityWebWorkUtil now
-
- 2.0 The webwork.ui.templateDir configuration property has been broken into webwork.ui.templateDir and webwork.ui.theme
-
webwork.ui.templateDir= /webwork/mytheme
-
-
webwork.ui.templateDir = /webwork
webwork.ui.theme = mytheme
-
-
- 2.0 "namespace" attribute of the ww:action tag is now evaluated; those upgrading from 2.0 will need to place single quotes around the attribute value <ww:action namespace="/foo" .../> <ww:action namespace="'/foo'" .../>
-
- 2.0, but not 1.x theme and template attributes in UI tags have changed are now evaluated; those upgrading from 2.0 will need to place single quotes around the attribute value <ww:xxxx theme="/template/foo" template="bar.vm"/> <ww:xxxx theme="'foo'" template="'bar.vm'"/>
-
- 1.x, 2.0 label UI tag evaluates the value attribute now instead of the name attribute <ww:label name="'Foo'"/> <ww:label value="'Foo'"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Reloading configuration.html b/docs/chinese/wikidocs/Reloading configuration.html
deleted file mode 100644
index 87f9bb046..000000000
--- a/docs/chinese/wikidocs/Reloading configuration.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
- WebWork 2 : ÖØ¼ÓÔØÅäÖÃÎļþ
-
-
-
-
-
-
-
-
-
-
- This page last changed on May 14, 2004 by mgreer .
-
-
- WebworkÔÊÐí¶¯Ì¬ÖØÐ¼ÓÔØxmlÅäÖÃÎļþ(ÀýÈç, ÖØÐ¼ÓÔØactions.xml).
ÕâÔÊÐíÄãÔÚ¿ª·¢ÆÚ¼äÖØÐÂÅäÖûӳÉä. Õâ¿ÉÄÜ»á´øÀ´Ò»Ð©ÐÔÄÜËðʧ, Òò´Ë²»ÍƼöÔÚ²úƷģʽÏÂʹÓÃ.ΪÁ˼¤»î¸ÃÌØÐÔ, ÐèÒªÔÚwebwork.propertiesÖмÓÈë:
-
webwork.configuration.xml.reload=true
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Resources Available to Velocity Views.html b/docs/chinese/wikidocs/Resources Available to Velocity Views.html
deleted file mode 100644
index bf4f3eb9f..000000000
--- a/docs/chinese/wikidocs/Resources Available to Velocity Views.html
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
- WebWork 2 : Resources Available to Velocity Views
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 10, 2004 by sutter2k .
-
-
-
-Here's the quick summary of the references available to Velocity templates that are kicked-off from WebWork:
- $actionInstanceVariable
- $req - the current HttpServletRequest
- $res - the current HttpServletResponse
- $stack - the current OgnlValueStack
- $ognl - an OgnlTool
- $webwork - an instance of WebWorkUtil
- $action - the current WebWork action
- $taglib (or something like that) - access to the JSP tag library via Velocity macros (!!)
-
-
-
-$actionInstanceVariable
-Each of your action class instance variables (for which you've written a getter method) are available in your Velocity template as $actionInstanceVariableName.In other words, if you have an instance variable in your Action class:
-
-
public class ProcessEditTableRowAction extends ActionSupport {
private String fooString;
-
And you have a getter method for that string (in that same ActionClass):
-
-
-
public String getFooString() { return fooString; }
-
Then in your Velocity template you can retrieve the value of that String by simply refering to:
-
Note: For the most part you don't have to worry about lettercase. If your Velocity reference is $fooString (note the lowercase "f" in foo) and your getter method is called getFooString (note uppercase "F" in foo) then WebWork does the "right thing" and uses getFooString() to retrieve the value of $fooString.But things can get weird is some circumstances. TODO: At least I think they can get weird. At one point, I remember having a problem with the lettercase of Velocity variable names and the corresponding getter methods that was being used to lookup the value. But I can't remember exactly how the problem manifested so can't provide an example. Need to do that.
TODO: I'm curious what takes care of translating the $variableName references to method calls on the Action object's getters. Where does that happen?
-$req
-The current HttpServletRequest created and managed by your Servlet environment (Tomcat, Resin, etc.).
-$res
-The current HttpServletResponse created and managed by your Servlet environment (Tomcat, Resin, etc.).
-$stack
-The OGNL value stack. (API Docs )
TODO: Talk about what's actually on the stack. Doesn't do a whole lot of good to know it's there without knowing what's on it.
-$ognl
-A reference to an OGNL tool. (API Docs )
-(See OGNL Basics )
At the time of this writing, there are no docs for that object, so if you really want to know how it works, be a Jedi and "use the source". (The CVS repository is browsable here: https://webwork.dev.java.net/source/browse/webwork/src/java )
-Tip:
-Jason/Patrick note that one nifty thing you can do with this tool is to call static class methods. That's rather handy since Velocity doesn't offer access to class variables or methods, but only to instantiate objects that have been placed in the Velocity Context. So you can't normally do things like Math.random().
To call a class method, from within Velocity template, using the OGNL tool, you do this:
-
-
-
$ognl.findValue("@com.acme.FooClass@FOO" )
-
TODO: the original email detailing the above example used $value to refer to the OGNL tool, not $ognl. But the source indicates it's "$ognl" that's shared with the context. Which is right?
-$webwork
-A reference to the VelocityWebWorkUtil class. (API Docs )At the time of this writing, the API docs for this object are effectively blank, so if you really want to know how it works, be a Jedi and "use the source". (The CVS repository is browsable here: https://webwork.dev.java.net/source/browse/webwork/src/java )
-Tip:
-Mathew notes that the VelocityWebWorkUtil class can instantiate other objects for you. This, too, is very handy since Velocity is normally constrained to only the objects that have been explicitely shared with it's context (and not something you have control over when using Velocity templates kicked off by WebWork).To instantiate an object from a Velocity page (that's been kicked off by WebWork, of course) do this:
-
#set($object = $webwork.bean("com.foo.ClassName" ))
-
This technique can be particularly handy for grabbing a reference to one of the VelocityTools objects. (The VelocityTools are not included with WebWork, you'll need to go grab the lib and put it in your classpath if you want to use $webwork.bean() to grab references to the tool objects.)
(Note: If you're rumaging through the source, the source-code for the $webwork.bean() method above is really in VelocityWebWorkUtil's parent class WebWorkUtil.)
-$action
-A reference to the action context that called this template. TODO: Not really sure what's in there or what it's good for. Should probably note that.
-#tag and #bodytag #Provides a way of using a JSP taglib from velocity.
-Many, but not all taglibs can be used.
ex:
-
-
#tag( Text "name='title.edit'" )
-
-provides a way to uses the <ww:text name="title.edit" /> tag from velocity.Note the <ww:text /> is probably not that useful from velocity since
-
-
$action.getText('title.edit')
-
would perform the same thing.see UI tags#WW/UI+Tags for more information about webworks tags. Many provide equivalent velocity examples. Usage with other tags could be infered based on examples given.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Result Types.html b/docs/chinese/wikidocs/Result Types.html
deleted file mode 100644
index 9e81eff07..000000000
--- a/docs/chinese/wikidocs/Result Types.html
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
- WebWork 2 : ½á¹ûÀàÐÍ
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
-
½á¹ûÀàÐÍ ÊÇһЩÀà, ÓÃÓÚ¾ö¶¨»î¶¯ÖµÖ´ÐÐÍê±Ï²¢·µ»ØÒ»¸ö½á¹ûºóÓ¦¸ÃÖ´ÐÐÄÇЩ¶¯×÷. ¿ª·¢Õß¿ÉÒÔ¸ù¾ÝÓ¦Óûỷ¾³µÄÐèÒª×ÔÓɵĴ´½¨×Ô¼ºµÄ½á¹ûÀàÐÍ. ÔÚWebWork 2ÖÐ, ÀýÈç, ServletºÍVelocity½á¹ûÀàÐÍÒѾ±àдÍê³ÉÓÃÀ´´¦ÀíÊÓͼ»æÖÆ.×¢Òâ: ËùÓÐWebWork¸½´øµÄ½á¹ûÀàÐͶ¼ÊµÏÖÁËcom.opensymphony.xwork.Result ½Ó¿Ú, ËüÃèÊöÁËËùÓлִÐнá¹ûµÄͨÓýӿÚ, ²»¹ÜÊÇÏÔʾWebÒ³Ãæ, Éú³Éµç×ÓÓʼþ, ·¢ËÍJMSÏûÏ¢, µÈµÈ.
½á¹ûÀàÐͶ¨ÒåÁËÀಢ½«ËüÓ³ÉäΪµ½Ò»¸öÃû×ÖÒÔ±ãÔڻ½á¹ûÅäÖÃÖÐÒýÓÃ. ËüΪÕâЩÀàÌṩÁ˼òдµÄÃûÖµ¶Ô.
-
-
...
<result-types>
<result-type name="dispatcher" class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" default="true" />
<result-type name="redirect" class="com.opensymphony.webwork.dispatcher.ServletRedirectResult" />
<result-type name="velocity" class="com.opensymphony.webwork.dispatcher.VelocityResult" />
<result-type name="chain" class="com.opensymphony.xwork.ActionChainResult" />
<result-type name="xslt" class="com.opensymphony.webwork.views.xslt.XSLTResult" />
<result-type name="jasper" class="com.opensymphony.webwork.views.jasperreports.JasperReportsResult" />
<result-type name="freemarker" class="com.opensymphony.webwork.views.freemarker.FreemarkerResult" />
<result-type name="httpheader" class="com.opensymphony.webwork.dispatcher.HttpHeaderResult" />
<result-type name="stream" class="com.opensymphony.webwork.dispatcher.StreamResult" />
</result-types>
...
-
-
-
-
<include file="webwork-default.xml" />
<package name="myPackage" extends="default" >
<action name="bar" class="myPackage.barAction" >
<result> foo.jsp</result>
<result name="error" > error.jsp</result>
</result>
</action>
</package>
-
WebworkÌṩÁËcom.opensymphony.xwork.Result ½Ó¿ÚµÄ¼¸¸öʵÏÖʹµÃ»ùÓÚWebµÄÓ¦ÓÃÈÝÒ×Óë»î¶¯Ïà½áºÏ. ÕâЩ½á¹ûÀàÐͰüÀ¨:
-
-
-
- Result Type name class
-
- Dispatcher Result dispatcher com.opensymphony.webwork.dispatcher.ServletDispatcherResult
-
- Redirect Result redirect com.opensymphony.webwork.dispatcher.ServletRedirectResult
-
- Action Chaining Result chain com.opensymphony.xwork.ActionChainResult
-
- Velocity Result velocity com.opensymphony.webwork.dispatcher.VelocityResult
-
- FreeMarker Result freemarker com.opensymphony.webwork.views.freemarker.FreemarkerResult
-
- JasperReports Result jasper com.opensymphony.webwork.views.jasperreports.JasperReportsResult
-
- XSL Result xslt com.opensymphony.webwork.views.xslt.XSLTResult
-
- HttpHeader Result header com.opensymphony.webwork.dispatcher.HttpHeaderResult
-
- Stream Result stream com.opensymphony.webwork.dispatcher.StreamResult
-
-
-½á¹ûÔÚxwork.xmlÖÐÖ¸¶¨²¢Ç¶Ì×ÔÚ<action>ÖÐ. Èç¹ûÄãÖ»ÐèÒªÖ¸¶¨"location"ÊôÐÔ, ¿ÉÒÔʹÓüòдÐÎʽ:
-
-
-
<action name="bar" class="myPackage.barAction" >
<result name="success" type="dispatcher" >
<param name="location" > foo.jsp</param>
</result>
</action>
-
»ò¼òдΪ
-
<action name="bar" class="myPackage.barAction" >
<result name="success" type="dispatcher" > foo.jsp</result>
</action>
-
Èç¹ûÄãÀ©Õ¹ÁËwebwork-default.xml, ÄÇôȱʡ½á¹ûÀàÐÍÊÇ"dispatcher". Èç¹ûÄã²»Ö¸¶¨½á¹ûÃû×Ö, Ëü½«±»Ö¸¶¨Îª"success". ÕâÒâζ×ÅÄã¸öÒ»½øÒ»²½¼òд
-
<action name="bar" class="myPackage.barAction" >
<result> foo.jsp</result>
</action>
-
×¢Òâ: locationÔªËØ½«×÷Ϊ±í´ïʽ½øÐнâÎö. ÏÂÃæµÄÀý×Ó˵Ã÷ÁËÕâÑù×öµÄºÃ´¦:
-
-
<result name="success" type="redirect" > /displayCart.action?userId=${userId}</result>
-
×¢Òâ: ÄãÒ²¿ÉÒÔΪ¶à¸ö»î¶¯Ö¸¶¨È«¾Ö½á¹û. µ±ÄãΪ¶à¸ö²»Í¬»î¶¯ÉèÖÃÏàͬµÄÊôÐÔʱ, ÕâÄܽÚʡһЩʱ¼ä. ¹ØÓÚ½á¹ûºÍÈ«¾Ö½á¹ûµÄ¸ü¶àÐÅÏ¢, ²Î¼û½á¹û Ò»½Ú.
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Results.html b/docs/chinese/wikidocs/Results.html
deleted file mode 100644
index f6a6d87b1..000000000
--- a/docs/chinese/wikidocs/Results.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- WebWork 2 : ½á¹û
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
-
½á¹ûÊǻ·µ»ØµÄ×Ö·û´®³£Á¿, ±íÊö»î¶¯µÄÖ´ÐÐÇé¿ö. WebWorkȱʡ¶¨ÒåÁËÒ»¸ö±ê×¼½á¹û¼¯: error, input, login, none and success. µ±È», ¿ª·¢×Å¿ÉÒÔÖ»Óе͍Òå×Ô¼ºµÄ½á¹ûÒÔ±íÊöÆäËûÓ¦ÓÃ״̬. ½á¹ûʹÓÃÃûÖµ¶ÔµÄ½á¹¹Ó³Éäµ½½á¹ûÀàÐÍ .
-
-
-
String SUCCESS = "success" ;
String NONE = "none" ;
String ERROR = "error" ;
String INPUT = "input" ;
String LOGIN = "login" ;
-
Äã¿ÉÒÔÀ©³äÄãÈÏΪÊʺϵĽá¹û´úÂë(Èç"missing-data"). ´ó¶àÊýÇé¿öÏÂÄãÖ»ÐèʹÓÃSUCCESSºÍERROR, SUCCESS½«Ç°½øµ½ÏÂÒ»¸öÒ³Ãæ;
-
-
<result name="success" type="dispatcher" >
<param name="location" > /thank_you.jsp</param>
</result>
-
ERROR ½«Ç°½øµ½´íÎóÒ³Ãæ, »òǰһ¸öÒ³Ãæ;
-
-
<result name="error" type="dispatcher" >
<param name="location" > /error.jsp</param>
</result>
-
½á¹ûÔÚxwork.xmlÖÐÖ¸¶¨²¢Ç¶Ì×ÔÚ<action>ÖÐ. Èç¹ûÄãÖ»ÐèÒªÖ¸¶¨"location"ÊôÐÔ, ¿ÉÒÔʹÓüòдÐÎʽ:
-
-
-
<action name="bar" class="myPackage.barAction" >
<result name="success" type="dispatcher" >
<param name="location" > foo.jsp</param>
</result>
</action>
-
-»ò¸ü¼òµ¥
-
-
<action name="bar" class="myPackage.barAction" >
<result name="success" type="dispatcher" > foo.jsp</result>
</action>
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Select tag.html b/docs/chinese/wikidocs/Select tag.html
deleted file mode 100644
index abcb13017..000000000
--- a/docs/chinese/wikidocs/Select tag.html
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
- WebWork 2 : Select±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
Éú³ÉÒ»¸öSELECTÑ¡ÏîÁбí. quot;listKey"ÊôÐÔÊÇÁбíÖÐÿ¸öÔªËØµÄÓÃÓÚÉú³É<option>±êÇ©ÖÐvalueµÄÊôÐÔ. "listValue"ÊôÐÔÌî³äoptionµÄÎı¾±êÇ©(ÏÔʾÃû³Æ). Ò»´óÌØÐÔÊǸù¾Ý"value"ÊôÐÔ×Ô¶¯Ñ¡ÖÐÊʵ±µÄÑ¡Ïî. Èç¹ûvalueÓÚµ±Ç°listKeyÏàµÈ, ¸ÃÑ¡ÏîÉèΪselected(Èç¹ûÀàÐÍ·ûºÏµÄ»°; ¼ûÏÂÎÄ).
-
-
-
<ww:select label="'Users'"
name="'userId'"
listKey="id"
listValue="name"
list="app.users"
value="app.user.id"
onchange="'chooseUser(this)'"
/>
-
½«Éú³ÉÏÂÁнá¹û(¼ÙÉègetApp().getUser().getId() == 2):
-
-
<tr>
<td> Users</td>
<td>
<select name="userId" onchange="chooseUser(this)" >
<option value="1" >
User Number One
</option>
<option value="2" selected="selected" >
User Number Two
</option>
</select>
<td>
</tr>
-
µ±È», <td>µÈ¸ñʽÒÀÀµÓÚÄãʹÓõÄÄ£°æ .Ó÷¨Ê¾Àý
-
-
<ww:select label="'Pets'"
name="'petIds'"
list="petDao.pets"
listKey="id"
listValue="name"
multiple="true"
size="3"
required="true"
/>
<ww:select label="'Months'"
name="'months'"
list="#{'01':'Jan', '02':'Feb', [...]}"
value="selectedMonth"
required="true"
/>
// The month id (01, 02, ...) returned by the getSelectedMonth() call
// against the stack will be auto-selected
-
×¢Òâ: ¶ÔÓÚÈκÎʹÓÃÁбíÊý¾ÝµÄ±êÇ©(select¿ÉÄÜÊÇ×î³£¼ûµÄ), ËüʹÓÃOGNLµÄÁбí±íʾ·¨(²Î¼ûÉÏÃæµÄÀý×Ó"months"), ×¢ÒâµÄÊÇ, ÕâÀï¼üÖµ(ÔÚmonthsÀý×ÓÖÐÊÇ'01', '02'µÈµÈ)ÊÇÊÖ¹¤ÊäÈëµÄ. '1'ÊÇ×Ö·û, '01'ÊÇ×Ö·û´®, "1"ÊÇ×Ö·û´®. Èç¹û"value"ÊôÐÔ·µ»ØµÄÖµºÍ"Áбí"ÖеļüÖµÀàÐͲ»Í¬Ê±, ¼´Ê¹×Ö·û´®ÖµÏàͬ, Ò²ÎÞ·¨Æ¥Åä. Èç¹ûÎÞ·¨Æ¥Åä, ÁбíÖн«Ã»ÓÐ×Ô¶¯Ñ¡ÖеÄÑ¡Ïî.ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×Ö¶ÎÖµ
-
- list ·ñ ÁбíʹÓõĿɵü´úÊý¾ÝÔ´, Èç¹ûÁÒ±íÊÇMap (key, value), key½«×÷ΪoptionµÄvalue, value×÷ΪËüµÄÄÚÈÝ(body)
-
- listKey ·ñ Áбí¶ÔÏóµÄ¼üÖµÊôÐÔ
-
- listValue ·ñ Áбí¶ÔÏóµÄÄÚÈÝÊôÐÔ
-
- headerKey ·ñ µÚÒ»¸öÑ¡ÏîµÄ½¨Öµ
-
- headerValue ·ñ µÚÒ»¸öÑ¡ÏîµÄÖµ
-
- emptyOption ·ñ ÊÇ·ñÔÚÑ¡ÏîÍ·(header option)ºó¼ÓÈë¿Õ°×(--)Ñ¡Ïî
-
- multiple ·ñ ÊÇ·ñÔÊÐí¶àÑ¡?
-
- size ·ñ HTMLµÄsizeÊôÐÔ
-
- disabled ·ñ HTMLµÄdisabledÊôÐÔ
-
- tabindex ·ñ HTMLµÄtabindexÊôÐÔ
-
- onchange ·ñ HTMLµÄonchangeÊôÐÔ
-
- onclick ·ñ HTMLµÄonclickÊôÐÔ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Simple validators.html b/docs/chinese/wikidocs/Simple validators.html
deleted file mode 100644
index eefaa4966..000000000
--- a/docs/chinese/wikidocs/Simple validators.html
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
- WebWork 2 : ¼òµ¥Ð£ÑéÆ÷
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jul 10, 2004 by unkyaku .
-
-
-
ÏÂÁÐУÑéÆ÷°üº¬ÔÚȱʡµÄvalidators.xmlÖÐ:
-
-
-
-Ãû³Æ ʹÓÃJavaScript ÃèÊö
-
-#required ×ֶαØÐëÓÐÖµ(·Ç¿Õ)
-
-#requiredstring x ×Ö¶ÎÖµ±ØÐë·Ç¿ÕÇÒ³¤¶È > 0
-
-#int x ×Ö¶ÎÖµ±ØÐëÊÇÕûÊý²¢ÔÚÒ»¶¨·¶Î§ÄÚ
-
-#date ×Ö¶ÎÖµ±ØÐëÊÇÈÕÆÚ(ÈÕÆÚ¸ñʽÒÀÀµÓÚÇøÓòÉèÖÃ)²¢ÔÚÒ»¶¨·¶Î§ÄÚ
-
-#expression ¸ø¶¨Ò»¸öOGNL±í´ïʹ²¢Ê¹ÓÃÖµÕ»½øÐÐÔËËã, ·µ»ØÖµ±ØÐëÊÇtrue. ¿ÉÓÃÓÚ¿ç×Ö¶ÎУÑé. ´íÎó½«×÷Ϊ»î¶¯´íÎó
-
-#fieldexpression ¸ø¶¨Ò»¸öOGNL±í´ïʹ²¢Ê¹ÓÃÖµÕ»½øÐÐÔËËã, ·µ»ØÖµ±ØÐëÊÇtrue. ÀàËÆÓÚexpression µ«´íÎó½«×÷Ϊ×ֶδíÎó
-
-#email x ×Ö¶ÎÖµ±ØÐëÊǺϷ¨µÄµç×ÓÓʼþµØÖ·
-
-#url x ×Ö¶ÎÖµ±ØÐëÊǺϷ¨µÄURL
-
-visitor ÔÊÐí½«Ð£Ñé×ªÒÆ¸ø»î¶¯µÄÊôÐÔ²¢Ê¹ÓÃËü×Ô¼ºµÄУÑéÎļþ
-
-conversion °ÑActionContextÖеÄÀàÐÍת»»´íÎó×÷Ϊ»î¶¯µÄ×ֶδíÎó. ÓëWebWorkConversionErrorInterceptor µÄ¹¦ÄÜÏàͬ
-
-
-×¢Òâ: Èç¹ûÄãʹÓÃ×Ô¼ºµÄvalidators.xmlÎļþ, ÉÏÊöÃû×Ö¿ÉÒÔÐÞ¸Ä.
SimpleAction-validation.xml:
-
-
-
<validators>
<field name="bar" >
<field-validator type="required" >
<message> You must enter a value for bar.</message>
</field-validator>
</field>
</validators>
-
#top
LoginAction-validation.xml:
-
<validators>
<field name="userName" >
<field-validator type="requiredstring" >
<message> You must enter an username.</message>
</field-validator>
</field>
</validators>
-
The error is shown if request parameter userName is missing or an empty string
#top
-
<validators>
<field name="foo" >
<field-validator type="int" >
<param name="min" > 0</param>
<param name="max" > 100</param>
<message key="foo.range" > Could not find foo.range!</message>
</field-validator>
</field>
</validators>
-
#top
-
-
-
<validators>
<field name="startDate" >
<field-validator type="date" >
<param name="min" > 12/22/2002</param>
<param name="max" > 12/25/2002</param>
<message> The date must be between 12-22-2002 and 12-25-2002.</message>
</field-validator>
</field>
</validators>
-
#top
-
-
-
<validators>
<validator type="expression" >
<param name="expression" > foo > bar</param>
<message> Foo must be greater than Bar. Foo = ${foo}, Bar = ${bar}.</message>
</validator>
</validators>
-
УÑéÆ÷²»½ö¼ì²éÒ»¸ö×Ö¶Î. Èç¹û±í´ïʽÖаüº¬xml×Ö·û, ¿ÉÒÔʹÓÃCDATA.
#top
-
<validators>
<field name="productCode" >
<field-validator type="fieldexpression" >
<param name="expression" > name.length() == 5</param>
<message> Product code must be 5 characters, it is currently '${productCode}'</message>
</field-validator>
</field>
</validators>
-
#top
-
-
-
<validators>
<field name="email" >
<field-validator type="email" >
<message> You must enter a valid email address.</message>
</field-validator>
</field>
</validators>
-
address±ØÐë·ûºÏ¸ñʽxxx@yyy.com|net|gov|org|edu|info|mil|biz|tv|…
#top
-
<validators>
<field name="companyUrl" >
<field-validator type="url" >
<message> You must enter a valid URL.</message>
</field-validator>
</field>
</validators>
-
#top
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Sitemesh.html b/docs/chinese/wikidocs/Sitemesh.html
deleted file mode 100644
index 5c1409f71..000000000
--- a/docs/chinese/wikidocs/Sitemesh.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
- WebWork 2 : SiteMesh
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- SiteMeshµÄÍøÖ·ÊÇhttp://www.opensymphony.com/sitemesh
¼¯³ÉWebWorkºÍSiteMeshÊ®·Ö¼òµ¥:ʵ¼ÊÉÏÄã²»ÐèÒª×öÈκÎÊÂ. WebWork½«È«²¿ÖµÕ»ÐÅÏ¢±£´æÔÚrequestÊôÐÔÖÐ, ÕâÒâζ×ÅÄãÐèÒªÏÔʾµÄÊý¾ÝÔÚÕ»ÖÐ(»òÔÚActionContextÖÐ), ¿ÉÒÔÖ±½ÓʹÓÃWebWorkµÄ±êÇ©¿â. ¾ÍÕâô¼òµ¥!
ÐèҪעÒâµÄÊÇ, Èç¹ûÄãÏëʹÓÃ<ww:set> ±êÇ©´Ó±»ÐÞÊÎÒ³ÃæÏòÐÞÊÎÆ÷´«µÝÊý¾Ý, ¶ø±»ÐÞÊÎÒ³ÃæÊDZ»Ö±½Óµ÷ÓõÄ(²»ÊǻµÄ½á¹û), ÕâʱÄãÐèÒªÖ¸¶¨·¶Î§(request, session, application). ȱʡÇé¿öÏÂÈç¹ûûÓÐÖ´ÐлҲûÓÐÖ¸¶¨·¶Î§, ÉèÖõÄÖµ½öÔÚͬһ¸öPageContextÖпÉÓÃ.
WebWork 2.1.7ÖÐ, ÔÚÐÞÊÎÆ÷ÖÐʹÓÃi18n¸üÈÝÒ×. ʹÓÃ<ww:text/>±êÇ©²¢²»ºÏÊÊ. µ±ÄãÐèҪʹÓÃi18n×Ö·û´®Ê±, ʹÓÃText±êÇ© µÄidÊôÐÔ.ÏÂÃæÊÇÕâÖÖÇé¿öµÄÀý×Ó. Ò»°ãÇé¿öÏÂÔÚ±íµ¥ÔªËØÖÐǶÈëi18nʹÓÃÏÂÁдúÂë:
-
<ww:textfield label="getText('com.acme.login.text')" name="'login'" />
-
µ«ÓÉÓÚWebWorkºÍSiteMeshµÄ¹¤×÷·½Ê½, ÄãÐèÒª°ÑÉÏÃæµÄ´úÂë·Ö³ÉÁ½¸ö±êÇ©.
-
<ww:text id="login" name="'com.acme.login.text'" />
<ww:textfield label="#login" name="'login'" />
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Spring.html b/docs/chinese/wikidocs/Spring.html
deleted file mode 100644
index 9cf76241b..000000000
--- a/docs/chinese/wikidocs/Spring.html
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
- WebWork 2 : Spring
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 03, 2004 by matthew .
-
-
-
-Check out http://www.springframework.org for more details about Spring. To summarize, Spring provides several different layers. Spring's IoC container, for instance, provides a nice transparent way to wire together objects with their dependencies, such as services they use. It can also, with the help of its AOP framework, provide transactional behavior to plain Java beans. Spring also provides an MVC framework, which is what could be compared to WebWork. There are those who believe WebWork is a better MVC framework, and so would choose WebWork for this part and integrate the rest of the Spring stack.
-
-There are a number of ways to integrate Spring into WebWork.The xwork-optional package from dev.java.net contains a module xwork-spring that contains all the necessary code to use Spring in WebWork. It contains primarily a SpringObjectFactory to wire up the dependencies for an Action before passing it to WebWork. Each action should be configured within a Spring application context as a prototype (because WebWork assumes a new instance of a class for every action invocation). Specify something like this in applicationContext.xml:
-
-
<bean name="some-action" class="fully.qualified.class.name" singleton="false" >
<property name="someProperty" > <ref bean="someOtherBean" /> </property>
</bean>
-
and in xwork.xml:
-
-
<action name="myAction" class="some-action" >
<result name="success" > view.jsp</result>
</action>
-
Notice that the WebWork Action's class name some-action is the bean name defined in the Spring application context.
Another advantage of the SpringObjectFactory approach is that it can also be used to load interceptors using the same sort of logic. If the interceptor is stateless, then it's possible to create the interceptor as a singelton instance, but otherwise it's best to create it as a Spring prototype.
-
-In order to be used, the default ObjectFactory that WebWork uses should be replaced with an instance of the SpringObjectFactory. There are two different ways to accomplish this. The first method is to use the ContextListener in the xwork-optional package. This method assumes that the Spring application context has already been configured. Add the following to web.xml:
-
-
<listener>
<listener-class> com.opensymphony.xwork.spring.SpringObjectFactoryListener</listener-class>
</listener>
-
Note: this is actually a XWork configuration but for simplicity, I just assume WebWork.
The second method is to call the initObjectFactory method on com.opensymphony.xwork.spring.SpringObjectFactory . The easiest way to do this is to have Spring's application configure and supply the aforementioned method as the "init-method". Add the following to your applicationContext.xml:
-
-
<bean id="spring-object-factory" class="com.opensymphony.xwork.spring.SpringObjectFactory" init-method="initObjectFactory" />
-
Note: The second option should work when only using Xwork (as compared to XW and WW2).
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Stream Result.html b/docs/chinese/wikidocs/Stream Result.html
deleted file mode 100644
index e10667da1..000000000
--- a/docs/chinese/wikidocs/Stream Result.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
- WebWork 2 : Stream Result
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-Ö±½ÓÏòHttpServletResponse·¢ËÍ(ͨ¹ýInputStream)Ôʼ(raw)Êý¾ÝÁ÷. Óû§ÏÂÔØÕýÎÄʱ·Ç³£ÓÐÓÃ.
-
-²ÎÊý ±ØÐè ȱʡֵ ÃèÊö
-
- inputName ·ñ inputStream »î¶¯ÖÐÀàÐÍΪInputStreamµÄÊôÐÔµÄÃû×Ö(ÈçgetInputStream())
-
- contentType ·ñ text/plain ·µ»ØµÄÕýÎÄÀàÐÍ
-
- contentDisposition ·ñ inline ÏìÓ¦µÄÍ·ÐÅÏ¢Content-dispositionµÄÖµ. µäÐ͵ÄÖµÊÇfilename="doc.pdf"
-
- bufferSize ·ñ 1024 »º³å´óС(×Ö½ÚÊý)
-
-
Example:
-
-
<result name="success" type="stream" >
<param name="inputName" > inputStream</param>
<param name="contentType" > ${contentType}</param>
<param name="contentDisposition" > filename="${filename}" </param>
<param name="bufferSize" > 2024</param>
</result>
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Submit tag.html b/docs/chinese/wikidocs/Submit tag.html
deleted file mode 100644
index d47c65214..000000000
--- a/docs/chinese/wikidocs/Submit tag.html
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
- WebWork 2 : Submit±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
Ìá½»°´Å¥.Ó÷¨Ê¾Àý
-
-
<ww:submit value="'Submit'" />
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ Îı¾Öµ
-
- align ·ñ HTMLµÄalignÊôÐÔ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Tabbedpane tag.html b/docs/chinese/wikidocs/Tabbedpane tag.html
deleted file mode 100644
index c9d95b7be..000000000
--- a/docs/chinese/wikidocs/Tabbedpane tag.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
- WebWork 2 : Tabbedpane±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
Ñ¡ÏÔÊÐíÇл»ÏÔʾ²»Í¬µÄÊÓͼ. µ±Óû§µã»÷Ò»¸öÑ¡Ïîʱ, Ëü±ä³Éµ±Ç°ÊÓͼ²¢±»»æÖƳöÀ´. Ñ¡Ïһ°ãÊÇÒ»¸ö±í¸ñ, µ×²¿°üº¬Ò»¸öÑ¡ÏîÒ³Ãæ. ±¾ÀýÖÐ, Ñ¡ÏµÄÑ¡ÏîÏòÓÒ¶ÔÆë. ¸üÈ«ÃæµÄÁ˽âÇë²é¿´WebWorkµÄÀý×Ó.
-
-
<p> <ww:tabbedpane id="tp1" contentName="'tabs1'" tabAlign="'RIGHT'" /> </p>
-
ÊôÐÔ
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- contentName ÊÇ ???
-
- tabAlign ·ñ Ñ¡Ïîˮƽ¶ÔÆë·½Ê½: RIGHT,LEFT,CENTER
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Table tag.html b/docs/chinese/wikidocs/Table tag.html
deleted file mode 100644
index 6fddb4be6..000000000
--- a/docs/chinese/wikidocs/Table tag.html
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
- WebWork 2 : Table±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
ÏÔʾHTML±í¸ñ.Ó÷¨Ê¾Àý
-
-
<ww:table modelName="'/result'" sortable="true" sortColumn="0" sortOrder="ASC" >
<ww:param name="'columnHidden(1)'" value="true" />
<ww:param name="'columnDisplayName(2)'" value="'New Display Name'" />
<ww:param name="'columnRenderer(0)'" value="#dateRenderer" />
<ww:param name="'columnRenderer(2)'" value="#linkRenderer" />
<ww:param name="'columnRenderer(4)'" value="#intRenderer" />
</ww:table>
-
ÊôÐÔ
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- Ö÷Ìâ ·ñ ʹÓõÄÖ÷Ìâ
-
- modelName ÊÇ ???
-
- sortable ·ñ ±í¸ñÁÐÊÇ·ñÐèÒªÅÅÐò
-
- sortColumn ·ñ ³õʼÅÉÐòÁеÄÐòºÅ
-
- sortOrder ·ñ ÅÅÁÐ˳Ðò(ASC,DESC,NONE)
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Tabular inputs with XWorkList.html b/docs/chinese/wikidocs/Tabular inputs with XWorkList.html
deleted file mode 100644
index 024610749..000000000
--- a/docs/chinese/wikidocs/Tabular inputs with XWorkList.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
- WebWork 2 : Tabular inputs with XWorkList
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- Sometimes you need a way to enter tabular data such as list of quantity for products in a shopping cart, marks from a list of examination candiates, etc. If you just have one input value per line item, you can use a HashMap to store the value. This can be expanded to support multiple input values by having multiple HashMap. This describes a number of alternatives using some of more advanced features of WebWork. Assume you want to capture the quantity and a gift note for a list of products in a shopping cart (i.e Amazon).
the cart.vm file
-
#foreach ( $item in $cart.items )
#set($index = $velocityCount - 1)
<input type="hidden" name="cart.items[$index].productId" value="$item.productId" >
<input type="text" name="cart.items[$index].qty" value="$item.qty" >
<input type="text" name="cart.items[$index].note" value="$item.note" >
#end
-
the UpdateCartAction.class
-
public class UpdateCartAction extends ActionSupport {
public Cart getCart() {
return ActionContext.getContext().getSession("cart.key" );
}
public String execute() throws Exception {
Cart cart = getCart();
}
}
-
the Cart.class
-
public class Cart implements Serializable {
private List items = new ArrayList();
public List getItems() {
return items;
}
public void addItem(CartItem item) {
...
}
}
-
the CartItem.class
-
public class CartItem implements Serializable {
private int qty;
private int productId;
private String note;
}
-
-
The resulting vm file is rendered as
-
-
-
<input type="hidden" name="cart.items[0].qty.productId" value="1" >
<input type="text" name="cart.items[0].qty" value="2" >
<input type="text" name="cart.items[0].note" value="This is a fun book!" >
<input type="hidden" name="cart.items[1].qty.productId" value="2" >
<input type="text" name="cart.items[1].qty" value="2" >
<input type="text" name="cart.items[1].note" value="You love this one" >
<input type="hidden" name="cart.items[2].qty.productId" value="3" >
<input type="text" name="cart.items[2].qty" value="$item.qty" >
<input type="text" name="cart.items[2].note" value="">
-
Webwork will populate all the entries in Cart with the correct values.
For example, you want to allow the user to enter any number of ISBN, quanty and a note. You can replace ArrayList with XWorkList, which will automatically create new items if the index is greater than the size of the list.
If you want more advanced way to do this, check out XW:Null Property Access for type conversion.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Templates.html b/docs/chinese/wikidocs/Templates.html
deleted file mode 100644
index 6aba13cf9..000000000
--- a/docs/chinese/wikidocs/Templates.html
+++ /dev/null
@@ -1,171 +0,0 @@
-
-
- WebWork 2 : Ä£°æ
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
ÔÚWebWorkÖÐ, UI±êÇ©°ü×°Á˳£ÓõÄHTML¿Ø¼þÒÔ±ãÓëºËÐÄ¿ò¼Ü½ôÃܼ¯³É. ÕâЩ±êÇ©Éè¼ÆÎª×îС»¯Âß¼´úÂë²¢½«×îÖÕHTML»æÖƹ¤×÷ת½»¸øÄ£°æÏµÍ³. Ä£°æ¿ÉÒÔ×éÖ¯ÆðÀ´·Ö³É²»Í¬µÄÖ÷Ìâ . UI±êÇ©ÊÔͼ¸²¸Ç×î³£¼ûµÄÇé¾°, »¹ÌṩÁËcomponent±êÇ©ÓÃÒÔ´´½¨¶¨ÖÆ×é¼þ. UI±êÇ©ÄÚ²¿Ö§³ÖÏÔʾ´íÎóÐÅÏ¢.
-WebWorkʹÓÃVelocityÄ£°æÏµÍ³ÎªËùÓÐUI±êÇ©(jspºÍvelocity)»æÖÆ×îÖÕµÄHTMLÊä³ö. È«²¿Ä£°æµÄȱʡʵÏÖ°üº¬ÔÚºËÐÄ·¢²¼°üÖÐÔÊÐíÓû§Ö±½ÓʹÓÃWebWorkµÄUI±êÇ©. Ä£°æ¿ÉÒÔµ¥¶À±à¼Ò²¿ÉÒÔÈ«²¿Ìæ»», ÕâÔÊÐí¶¨ÖÆÈ«²¿HTMLÊä³ö½á¹û. ÁíÍâ, ȱʡģ°æ¿ÉÒÔÔںܾ«Ï¸µÄ¿ØÖƼ¶±ð϶Ôÿ¸ö±êÇ©½øÐи²¸Ç.
Ä£°æ´æ·ÅÔÚ·¢Ðаüwebwork-x.x.jarµÄsrc/java Ŀ¼ÏµÄtemplate Ŀ¼ÖÐ. ҪʹÓö¨ÖÆÄ£°æ, ¿ÉÒÔ½«template Ŀ¼¸´ÖƵ½Ó¦ÓõĸùĿ¼»òÀà·¾¶ÖÐ. WebworkÊ×ÏÈ´ÓÉÏÊöÁ½¸öµØ·½¼ÓÔØÄ£°æ. ·ñÔò, ½«´Ówebwork.jarÖмÓÔØ.
-
-
/myApp
/META-INF
/WEB-INF
/template
-
ÔÚtemplate Ŀ¼ÖÐ, ¿ÉÒÔÕÒµ½Á½¸ö³Æ×÷Ö÷Ìâ µÄÄ£°æ¼¯ºÏ(xhtmlºÍsimple). UI±êǩȱʡʹÓõÄÄ£°æÊÇ'xhtml', ³ý·ÇÔÚUI±êÇ©ÖÐÖ¸¶¨themeÊôÐÔ»òÔÚwebwork.properties ÖÐÖ¸¶¨webwork.ui.theme. Äã¿ÉÒÔÐÞ¸ÄÒÑÓÐÄ£°æ»ò´´½¨×Ô¼ºµÄÄ£°æ.
ÀàAbstractUIÊÇÆäËûUI±êÇ©µÄ»ùÀà. ËüÌṩһ×éUI×é¼þ³£ÓõÄÊôÐÔ. ÀàAbstractUI¶¨ÒåÁËÒ»¸ö³éÏó·½·¨:
-
-
-
protected abstract String getTemplateName();
-
ÀàAbstractUI½«¼ÓÔØ×ÓÀàÖ¸¶¨µÄ»òÓû§Ê¹ÓÃtemplateÊôÐÔÖ¸¶¨µÄÄ£°æ. ÏÂÁдúÂëÖÐtextfield±êÇ©½«Ê¹ÓÃmyOwnTextTemplate.vm¶ø²»ÊÇÄÚ½¨Ä£°ætext.vm
×¢Òâ: Äã±ØÐë´´½¨Ò»¸öÄ£°æÎļþmyOwnTextTemplate.vm²¢°ÑËü±£´æÔÚxhtmlĿ¼ÖÐ.
-
-
<ww:ui textfield label="'mylabel'" name="'myname'" template="'myOwnTextTemplate.vm'" />
-
-·ñÔò
-
-
<ww:ui textfield label="'mylabel'" name="'myname'" />
-
ÿ¸öUI±êÇ©µÄȱʡģ°æÈçÏÂ:
-
-
- UI±êÇ© ȱʡģ°æ
-
- checkboxList checkboxlist.vm
-
- checkbox checbox.vm
-
- combobox combobox.vm
-
- component empty.vm
-
- doubleSelect doubleselect.vm
-
- file file.vm
-
- form form.vm(to open)
-form-close.vm(to close)
-
- hidden hidden.vm
-
- label label.vm
-
- password password.vm
-
- radio radiomap.vm
-
- select select.vm
-
- submit submit.vm
-
- tabbedpane tabbedpane.vm
-
- textarea textarea.vm
-
- textfield text.vm
-
- token token.vm
-
-
-WebWorkʹÓÃÏÂÁÐÉÏÏÂÎıäÁ¿´´½¨VelocityContext¶ÔÏóÓÃÓÚÈ«²¿velocityÊÓͼ:
- tag - ±êÇ©¶ÔÏó
- stack - µ±Ç°µÄOgnlValueStack
- ognl - ¹¤¾ßÀàOgnlTool
- req - HttpServletRequest¶ÔÏó
- res - HttpServletResponse¶ÔÏó
- webwork - WebWorkUtilʵÀý
- action - µ±Ç°»î¶¯
- parameters - µ±Ç°²ÎÊý±í
-
-ÔÚÄ£°æÖпÉÒÔʹÓÃ$TAG_NAME·ÃÎÊÉÏÊö±äÁ¿(TAG_NAME¿ÉÒÔÊÇtag, stack, ognl, reqÖеÄÒ»¸ö). Ä£°æÎļþËæºó½éÉÜ. һЩÀý×Ó:
-×¢Òâ: ¸Ð̾ºÅ(!)½«Êä³ö¶¨ÒåµÄÖµ, ·ñÔòÊä³ö""
-
-
$!req.requestURI
$!req.method
-
-
-
-
$!tag.templateDir
$!tag.theme
-
-
-
-
$!parameters.name
$!parameters
-
¿´¿´Ä£°æÊÇÈçºÎ±»ÕÒµ½²¢¼ÓÔØµÄ. AbstractUITagչʾÁËʹÓÃ×Ö·û´®¹¹½¨Ä£°æµÄ·½·¨:
-
-
protected String buildTemplateName(String myTemplate, String myDefaultTemplate) {
...
return "/" + getTemplateDir() + "/" + getTheme() + "/" + template;
}
-
-ȱʡÇé¿öÏÂtextfield±êÇ©µÄ·µ»ØÖµÎª
-
-
/template/xhtml/text.vm
-
-Webwork½«ÔÚʹÓÃȱʡֵ֮ǰ³¢ÊÔ²éÕÒ¸ÃÖµ. Èç¹ûÄãÔ¸Òâ, Äã¿ÉÒÔ²»ÐÞ¸ÄÈκÎÖµ¾Í¿ÉÒÔÐÞ¸ÄÄÚ½¨Ä£°æ(Çë×ÔÐÐÑ¡Ôñ). Webwork½«Ê¹ÓÃÏÂÁÐ˳Ðò½øÐÐËÑË÷:
-
- getTemplateDir()
- webwork.propertiesÖеÄwebwork.ui.templateDir
- ·ñÔò, ·µ»Ø"template"
-
- getTheme()
- UI±êÇ©µÄthemeÊôÐÔ
- webwork.propertiesÖеÄwebwork.ui.theme
- ·ñÔò, ·µ»Ø"xhtml"
-
- template
- UI±êÇ©µÄtemplateÊôÐÔ
- ·ñÔò, ʹÓÃȱʡָ¶¨µÄÄ£°æ
-
-
ȱʡģ°æÔÚÊä³öHTMLʱʹÓÃÁ˼¸¸öCSSÊôÐÔ. ÕâЩÊôÐÔÔÚ/template/xhtmlĿ¼ÖеÄstyles.css Ñùʽµ¥ÖÐ. Äã¿ÉÒÔ½«¸ÃÑùʽµ¥×÷ΪÄãµÄÓ¦ÓõÄÑù°åÒ²¿ÉÒÔÔÚ´´½¨Äã×Ô¼ºµÄÑùʽµ¥, µ«Òª¼ÇµÃÔÚJSP»òvelocityÒ³ÃæÖаüº¬¸ÃÑùʽµ¥µÄÁ´½Ó.
-styles.css:
-
-
.label {font-style:italic; }
.errorLabel {font-style:italic; color:red; }
.errorMessage {font-weight:bold; text-align: center; color:red; }
.checkboxLabel {}
.checkboxErrorLabel {color:red; }
.required {color:red;}
.requiredLabel {font-weight:bold; font-style:italic; }
-
-ÔÚÄãµÄÒ³ÃæÖÐʹÓÃLINKÒýÓøÃÎļþ(¿ÉÒÔʹÓÃÏà¶Ô·¾¶»ò¾ø¶Ô·¾¶):
-
-
<link rel ="stylesheet" type="text/css" href="/webwork-example/template/xhtml/styles.css" title="Style" >
-
×¢Òâ: ÏÖÔÚWebworkÔÚUI±êÇ©ÖÐÔö¼ÓÁËеÄÊôÐÔÒÔ±ã¸üÈ«ÃæµÄÖ§³ÖHTMLµÄstyleºÍclass, ¿ÉÒÔ¸üÁé»îµÄʵÏÖÍâ¹Û. ÕâЩÊôÐÔ·Ö±ð¶¨ÒåΪcssStyleºÍcssClass.
-
-
<ui:textfield label="'lebal'" name="'nmae'" cssStyle="'float:left; color:red'" cssClass="'myclass'" />
-
¶Ôcomponent±êÇ©µÄ×î³õ½éÉܲ¢Ã»ÓиøÈËÉî¿ÌµÄÓ¡Ïó. Ö»ÄÜÖ¸¶¨Ò»¸öÄ£°æ, ʹÓÃһЩԤÏȶ¨ÒåµÄÊôÐÔ¿´ÆðÀ´ÄÜÁ¦ÓÐÏÞ. µ«¸Ã±êǩΪ¿ª·¢ÕßÌṩÁËÐí¶àºÃ´¦.
ÔÚÉîÈëµ½¶¨ÖÆ×é¼þ֮ǰ, Ê×ÏÈÃ÷ȷʹÓÃcomponent±êÇ©´´½¨¶¨ÖÆ×é¼þµÄ¼¸¸öÓŵã. È»ºó½«Ïêϸ½éÉÜWebWork 2ÖеÄÁ½ÖÖ´íÎóÐÅÏ¢ÒÔ¼°¶¨ÖÆ×é¼þÈçºÎ(ÏÔʾÆäÖÐÒ»ÖÖ)ÊÊÓ¦. ×îºó, ½«ÎªÎÒÃǵÄ×é¼þÌṩһ¸ö¼òµ¥µÄ»î¶¯Àà, jspÎļþºÍÄ£°æÎļþ. ½áÊøÊ±, Ä㽫Äܹ»°ÑÐÂ×é¼þÓ¦Óõ½ÄãµÄÓ¦ÓÃÖÐ.ΪʲôʹÓÃcomponent±êÇ©?
-
- ²»ÐèÒª¿ª·¢Äã×Ô¼ºµÄ±êÇ©¿â
- ¼¯³É¶ÔÖµÕ»µÄ·ÃÎÊ
- ÀûÓÃXWorkµÄ¹ú¼Ê»¯, ±¾µØ»¯ºÍ´íÎó´¦ÀíÄÜÁ¦
- ʹÓÃÄ£°æ(¿É±à¼Îı¾Îļþ)¶ø²»ÊDZàÒë´úÂë¿ÉÒÔ¸ü¿ìµÄ½¨Á¢ÔÐÍ
- ¸´Óò¢×éºÏÒÑÓÐÄ£°æ
-
-¶Ô´íÎóÏûÏ¢µÄÖ§³Ö:ÔÚWebWork 2ÖÐ, ÓÐÁ½Àà´íÎóÏûÏ¢: ×ֶδíÎóÏûÏ¢ºÍ»î¶¯´íÎóÏûÏ¢. ×ֶδíÎóÏûÏ¢´ú±íijһ¿Ø¼þµÄÎÊÌâ²¢ÏÔʾÔڿؼþÖÐ. Ðí¶à±êǩ֧³ÖÏÔʾÕâÖÖÏûÏ¢. ÁíÒ»·½Ãæ»î¶¯´íÎóÏûÏ¢´ú±í»î¶¯Ö´ÐеÄÎÊÌâ. ÔÚWebÓ¦ÓÃÖкܶàÊÂÎï»áµ¼Ö´íÎó, ÓÈÆäÊÇÔÚÒÀÀµÓÚÍⲿ×ÊÔ´µÄÓ¦ÓÃÖÐÈçÊý¾Ý¿â, Ô¶³ÌWeb·þÎñ, »òÆäËûÔڻִÐÐÆÚ¼ä¿ÉÄܲ»¿ÉÓõÄ×ÊÔ´. ÄÜ·ñÓÅÑŵĴ¦Àí´íÎó²¢ÏòÓû§ÌṩÓÐÓõÄÏûϢͨ³£ÊÇÓû§ÌåÑéºÃÓ뻵µÄÇø±ð. µ±ÕâÖÖ´íÎó·¢Éúʱ, °ÑÏûÏ¢´Ó±íµ¥¿Ø¼þÖзÖÀë³öÀ´µ¥¶ÀÏÔʾ¸üΪºÏÊÊ. ÏÂÀýÖÐ, ÎÒÃǽ«´´½¨Ò»¸ö¿ÉÒÔÓÃÁбíÏֻ´íÎóÏûÏ¢µÄ¶¨ÖÆ×é¼þ. ¸Ã×é¼þ¿ÉÒÔÓÃÓÚÈ«²¿ÏÔʾÕâÀà´íÎóÏûÏ¢µÄ±íµ¥ÖÐ.
ÏÂÃæµÄ»î¶¯½«´¦ÀíÍøÕ¾ÉÏµÄ¹ã¸æ: Ãâ·ÑµÄµç×ÓÖ¤Êé. Ëü½«³¢ÊÔ·¢ËÍÖ¤ÊéÓʼþ, µ«»áÅ׳öÒì³£.»î¶¯Àà:
-
package example;
import com.opensymphony.xwork.ActionSupport;
public class AddUser extends ActionSupport {
private String fullname;
private String email;
public String execute() throws Exception {
try {
MailUtil.sendCertificate(email, fullname);
} catch (Exception ex) {
addActionError("We are experiencing a technical problem and have contacted our support staff. " +
"Please try again later." );
}
if (hasErrors()) {
return ERROR;
} else {
return SUCCESS;
}
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this .fullname = fullname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this .email = email;
}
}
-
JspÒ³Ãæ:
-
<%@ taglib uri="webwork" prefix="ui" %>
<html>
<head> <title> custom component example</title> </head>
<link rel ="stylesheet" type="text/css" href="/webwork-example/template/xhtml/styles.css" title="Style" >
<body>
<ui:form action="AddUser.action" method="POST" >
<table>
<ui:component template="action-errors.vm" />
<ui:textfield label="Full Name" name="fullname" />
<ui:textfield label="Email" name="email" />
<ui:submit name="submit" value="Send me a free E-Certificate!" />
</table>
</ui:form>
</body>
</html>
-
HTMLÊä³ö(Ìύǰ):
-
<html>
<head> <title> custom component example</title> </head>
<link rel ="stylesheet" type="text/css" href="/webwork-example/template/xhtml/styles.css" title="Style" >
<body>
<form action="AddUser.action" method="POST" />
<table>
<tr>
<td align="right" valign="top" > <span class="label" > Full Name:</span> </td>
<td>
<input type="text" name="fullname" value="" />
</td>
</tr>
<tr>
<td align=" right" valign=" top"> <span class=" label"> Email:</span> </td>
<td>
<input type=" text" name=" email" value=" " />
</td>
</tr>
<tr>
<td colspan=" 2">
<div align=" right">
<input type=" submit" name=" submit" value=" Send me a free E-Certificate!"/>
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
-
ÏÂÃæµÄÄ£°æ½«Ñ»·È«²¿»î¶¯´íÎó²¢ÏÔʾÔÚÁбíÖÐ.
Ä£°æ(action-errors.vm)
-
-
-
#set ($actionErrors = $stack.findValue("actionErrors" ))
#if ($actionErrors)
<tr>
<td colspan="2" >
<span class="errorMessage" > The following errors occurred:</span>
<ul>
#foreach ($actionError in $actionErrors)
<li> <span class="errorMessage" > $actionError</span> </li>
#end
</ul>
</td>
</tr>
#end
-
HTMLÊä³ö(Ìá½»Ö®ºó):
-
<html>
<head> <title> custom component example</title> </head>
<link rel ="stylesheet" type="text/css" href="/webwork-example/template/xhtml/styles.css" title="Style" >
<body>
<form action="AddUser.action" method="POST" />
<table>
<tr>
<td colspan="2" >
<span class="errorMessage" > The following errors occurred:</span>
<ul>
<li class="errorMessage" >
We are experiencing a technical problem and have contacted our
support staff. Please try again later.
</li>
</ul>
</td>
</tr>
<tr>
<td align="right" valign="top" > <span class="label" > Full Name:</span> </td>
<td>
<input type="text" name="fullname" value="Sample User" />
</td>
</tr>
<tr>
<td align="right" valign="top" > <span class="label" > Email:</span> </td>
<td>
<input type="text" name="email" value="user@example.com" />
</td>
</tr>
<tr>
<td colspan="2" >
<div align="right" >
<input type="submit" name="submit" value="Send me a free E-Certificate!" />
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Text tag.html b/docs/chinese/wikidocs/Text tag.html
deleted file mode 100644
index 1c9162c2c..000000000
--- a/docs/chinese/wikidocs/Text tag.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
- WebWork 2 : Text±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
Êä³öÒ»¸ö¾¹ý¹ú¼Ê»¯´¦ÀíµÄ×Ö·û´®. ËüÓëi8ln±êÇ©ÁªºÏʹÓÃ. text´ÓÖÜΧµÄi8ln±êÇ©¶¨ÒåµÄ×ÊÔ´°üÖлñȡָ¶¨µÄÎı¾ÐÅÏ¢. ²ÎÊýÖµ¿ÉÒÔ´«µÝµ½ÏûÏ¢ÖÐ, ÀýÈç¸ñʽ»¯ÈÕÆÚ»ò»õ±Ò.ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- name ÊÇ ÌáÈ¡µÄÊôÐÔÃû
-
- id ·ñ Ö¸¶¨Ê±, ½«Êä³ö½á¹ûʹÓÃid×÷Ϊ¼üÖµ±£´æÔÚActionContextÖÐ
-
- value0 ·ñ ´«µÝÏûÏ¢ÖеIJÎÊý0
-
- value1 ·ñ ´«µÝÏûÏ¢ÖеIJÎÊý1
-
- value2 ·ñ ´«µÝÏûÏ¢ÖеIJÎÊý2
-
- value3 ·ñ ´«µÝÏûÏ¢ÖеIJÎÊý3
-
-
-Ó÷¨Ê¾Àý
-
-
Accessing messages from a given bundle (the i18n Shop example bundle in this case)<br>
<ww:i18n name="'webwork.action.test.i18n.Shop'" >
<ww:text name="'main.title'" />
</ww:i18n>
-
-
<ww:i18n id="foo" name="'webwork.action.test.i18n.Shop'" >
<ww:text name="'main.title'" />
</ww:i18n>
<ww:property value="#foo" />
-
×¢Òâ: Äã¿ÉÒÔʹÓÃÏÂÃæµÄ¸ñÊ½Ìæ»»value0..value4:
-
-
<ww:text name="'someKey'" >
<ww:param value="'Hello'" />
</ww:text>
-
-
-»òÕß
-
<ww:text name="'someKey'" >
<ww:param> Hello</ww:param>
</ww:text>
-
-
- µ±Ä㽫HTMLǶÈëÏûÏ¢ÖÐʱ, ÕâÖÖ¸ñʽ·Ç³£ÓÐЧ, ÒòΪÄã²»ÐèÒªµ£ÐÄÕⲿ·Ö´úÂë¿ÉÄÜÓÐתÂë(escaping)ÎÊÌâ.
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Textarea tag.html b/docs/chinese/wikidocs/Textarea tag.html
deleted file mode 100644
index 128f7fe35..000000000
--- a/docs/chinese/wikidocs/Textarea tag.html
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
- WebWork 2 : Textarea±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
»æÖÆÒ»¸ötextarea±êÇ©.Ó÷¨Ê¾Àý
-
-
<ww:textarea label="'Comments'" name="'comments'" cols="30" rows="8" />
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- value ·ñ ×Ö¶ÎÖµ
-
- rows ·ñ HTMLµÄrowsÊôÐÔ
-
- cols ·ñ HTMLµÄcolsÊôÐÔ
-
- wrap ·ñ HTMLµÄwrapÊôÐÔ
-
- disabled ·ñ HTMLµÄdisabledÊôÐÔ
-
- tabindex ·ñ HTMLµÄtabindexÊôÐÔ
-
- onchange ·ñ HTMLµÄonchangeÊôÐÔ
-
- onclick ·ñ HTMLµÄonclickÊôÐÔ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Textfield tag.html b/docs/chinese/wikidocs/Textfield tag.html
deleted file mode 100644
index 7f207e12d..000000000
--- a/docs/chinese/wikidocs/Textfield tag.html
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
- WebWork 2 : Textfield±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
±¾ÀýÖÐ, »æÖÆÁËÒ»¸öÎı¾¿Ø¼þ. Ëüͨ¹ýµ÷ÓÃActionSupportµÄgetText()·½·¨´ÓResourceBundleÖÐÌáÈ¡Îı¾±êÇ©.
-
-
<ww:textfield label="text('user_name')" name="'user'" />
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- id ·ñ HTMLµÄidÊôÐÔ
-
- name ÊÇ HTMLµÄnameÊôÐÔ
-
- size ·ñ HTMLµÄsizeÊôÐÔ
-
- maxlength no HTMLµÄmaxlengthÊôÐÔ
-
- readonly no HTMLµÄreadonlyÊôÐÔ
-
- disabled ·ñ HTMLµÄdisabledÊôÐÔ
-
- tabindex ·ñ HTMLµÄtabindexÊôÐÔ
-
- onchange ·ñ HTMLµÄonchangeÊôÐÔ
-
- onclick ·ñ HTMLµÄonclickÊôÐÔ
-
- label ·ñ ÓÃÓÚÄ£°æÖеıêÇ©ÎÄ×Ö
-
- labelposition ·ñ ±êÇ©µÄ¶ÔÆë·½Ê½ (left,right,center)
-
- required ·ñ ÔÚ±íµ¥ÌύʱÊÇ·ñÊDZØÐè×Ö¶Î
-
- cssClass ·ñ HTMLµÄclassÊôÐÔ
-
- cssStyle ·ñ HTMLµÄstyleÊôÐÔ
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-×¢Òâ: ±¾±êÇ©µÄȱʡģ°æÊÇtext.vm ¶ø²»ÊÇtextfield.vm .
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Themes.html b/docs/chinese/wikidocs/Themes.html
deleted file mode 100644
index 9a0fcec11..000000000
--- a/docs/chinese/wikidocs/Themes.html
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
- WebWork 2 : Ö÷Ìâ
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
- Ö÷ÌâÊÇÒ»×éÓÃÓÚ¶¨ÖÆÊ¹ÓÃUI±êÇ©¿ª·¢µÄÒ³ÃæµÄÄ£°æ . ËüÌṩÁËÒ»¸öÇ¿´óµÄ»úÖÆÔÊÐíweb¿ª·¢ÈËԱʹÓûìºÏ·ç¸ñ(ÑÕÉ«, ×ÖÌåµÈ)ΪÓû§½çÃæÔöÌíÁÁÉ«. ÀýÈç, Äã¿ÉÄÜÏ£Íû±íµ¥ÖÐÒ»°ëÎı¾¿òʹÓÃÀ¶É«±³¾°¶øÁíÒ»°ëʹÓð×É«±³¾°. ×¢Òâ:
- Webwork¸½´øÁ½¸öÒѶ¨ÒåµÄÖ÷Ìâ; "simple"ºÍ"xhtml"(ȱʡµÄ). WebWorkȱʡÔÚÓ¦ÓõÄ/template Ŀ¼Ï²éÕÒÖ÷Ìâ. ȱʡÖ÷ÌâÊÇxhtml . ÕâÒâζ×ÅÈç¹ûÄãûÓÐÔÚUI±êÇ©ÖÐÖ¸¶¨themeÊôÐԵϰ, ½«Ê¹ÓÃȱʡÖ÷Ìâ. ×¢Òâ: Äã¿ÉÒÔÔÚwebwork.properties ÎļþÖÐÐÞ¸Äwebwork.ui.theme= ºÍwebwork.ui.templateDir= À´¸Ä±äȱʡֵ.
-
-
- Ò²¿ÉÒÔ´´½¨¶¨ÖÆÖ÷ÌâÒÔÊʺÏ×Ô¼ºµÄÐèÒª. ÎÒÃÇÍÆ¼ö²Î¿¼ÒѶ¨ÒåµÄÄ£°æ×÷ΪÆðµã.
-
-
- ÿ´ÎʹÓÃUI±êǩʱ, ±êÇ©¶¼ÒýÓÃÒ»¸öÄ£°æÀ´»æÖÆHTML. Òò´ËÄ£°æ¾ö¶¨ÁË×Ö¶ÎÍâ¹ÛºÍËüÔÚÒ³ÃæÉϵÄλÖÃ. Ŀǰ, ½öÖ§³ÖvelocityÄ£°æ. ÎÞÂÛÈçºÎ, Ï£ÍûÔÚδÀ´°æ±¾ÖÐÖ§³Ö´´½¨JSPÄ£°æ.
-
-×¢Òâ: ÔÚ¼ÌÐøÖ®Ç°, ÍÆ¼öÄ㸴²éWebWorkÄ£°æÏµÍ³µÄ¹¤×÷ÔÀí. (²Î¼ûÄ£°æ )
xhtml ÊÇWebWork¸½´øµÄȱʡÖ÷Ìâ. ËüÀ©Õ¹ÁËsimpleÖ÷Ìâ²¢ÌṩÄÚ½¨µÄ´íÎ󱨸æ, ±í¸ñ¶¨Î»ºÍÌí¼ÓÎı¾±êÇ©µÄ¹¦ÄÜ. È»ÎÒÃÇ¿´¿´×î³£ÓõÄUI±êÇ©, textfield , ²¢Õ¹Ê¾Ê¹ÓÃXHTMLÖ÷Ìâ´´½¨ÊÓͼµÄÕýÈ··½·¨.Äã¿ÉÄÜÒѾ֪µÀ, textfield±êǩʹÓõÄȱʡģ°æÊÇ/template/xhtmlĿ¼ÏµÄtext.vm.
-
#*
-- text.vm
*#
## notice the re-use of the simple theme template text.vm
#parse("/template/xhtml/controlheader.vm" )
#parse("/template/simple/text.vm" )
#parse("/template/xhtml/controlfooter.vm" )
-
-¸ÃÄ£°æ¼ÓÔØÊ±, ½«Ê×ÏȽâÎö²¢»æÖÆ/template/xhtml/controlheader.vm. ÔÚcontrolheader.vmÖпÉÒÔ¿´µ½´íÎ󱨸æ, ±í¸ñ¶¨Î»ºÍÌí¼ÓÎı¾±êÇ©µÄ¹¦ÄÜ. Èç¹ûActionSupport·µ»ØÁË´íÎó, ½«Ê¹ÓÃÕâ¸öÄ£°æ»æÖƳÉHTML. »¹ÄÜ¿´µ½ÈçºÎ»ñÈ¡parameter.labelµÄÖµ²¢Ê¹Óñí¸ñÔªËØtrºÍtd½øÐж¨Î».
-
-
-
#*
-- controlheader.vm
*#
## Only show message if errors are available.
## This will be done if ActionSupport is used.
#if( $fieldErrors.get($parameters.name) )
#set ($hasFieldErrors = $fieldErrors.get($parameters.name))
#foreach ($error in $fieldErrors.get($parameters.name))
<tr>
#if ($parameters.labelposition == 'top')
<td align="left" valign="top" colspan="2" >
#else
<td align="center" valign="top" colspan="2" >
#end
<span class="errorMessage" > $!webwork.htmlEncode($error)</span>
</td>
</tr>
#end
#end
## Provides alignment behavior with table tags
## if the label position is top,
## then give the label it's own row in the table
## otherwise, display the label to the left on same row
<tr>
#if ($parameters.labelposition == 'top')
<td align="left" valign="top" colspan="2" >
#else
<td align="right" valign="top" >
#end
#if ($hasFieldErrors)
<span class="errorLabel" >
#else
<span class="label" >
#end
## If you want to mark required form fields with an asterisk,
## you can set the required attribute
## Ex. <ui:textfield label="'mylabel'" name="'myname'" required="'true'" />
#if ($parameters.label)
#if ($parameters.required) <span class="required" > *</span> #end
$!webwork.htmlEncode($parameters.label):
#end
</span>
</td>
## add the extra row
#if ($parameters.labelposition == 'top')
</tr>
<tr>
#end
<td>
-
-ÏÂÒ»¸ö±»/template/xhtml/text.vm½âÎöµÄÄ£°æÊÇ/template/simple/text.vm. ÕâÀï¿ÉÒÔ¿´µ½Êµ¼ÊµÄHTMLµÄtextÔªËØÈçºÎ»æÖÆÒÔ¼°²ÎÊýÈçºÎ´«µÝµÄ.
-
-
#*
-- text.vm
--
-- Required Parameters:
-- * label - The description that will be used to identfy the control.
-- * name - The name of the attribute to put and pull the result from.
-- Equates to the NAME parameter of the HTML INPUT tag.
--
-- Optional Parameters:
-- * labelposition - determines were the label will be place in relation
-- to the control. Default is to the left of the control.
-- * size - SIZE parameter of the HTML INPUT tag.
-- * maxlength - MAXLENGTH parameter of the HTML INPUT tag.
-- * disabled - DISABLED parameter of the HTML INPUT tag.
-- * readonly - READONLY parameter of the HTML INPUT tag.
-- * onkeyup - onkeyup parameter of the HTML INPUT tag.
-- * tabindex - tabindex parameter of the HTML INPUT tag.
-- * onchange - onkeyup parameter of the HTML INPUT tag.
--
*#
<input type="text"
name="$!webwork.htmlEncode($parameters.name)"
#if ($parameters.size) size="$!webwork.htmlEncode($parameters.size)" #end
#if ($parameters.maxlength) maxlength="$!webwork.htmlEncode($parameters.maxlength)" #end
#if ($parameters.nameValue) value="$!webwork.htmlEncode($parameters.nameValue)" #end
#if ($parameters.disabled == true) disabled="disabled" #end
#if ($parameters.readonly) readonly="readonly" #end
#if ($parameters.onkeyup) onkeyup="$!webwork.htmlEncode($parameters.onkeyup)" #end
#if ($parameters.tabindex) tabindex="$!webwork.htmlEncode($parameters.tabindex)" #end
#if ($parameters.onchange) onchange="$!webwork.htmlEncode($parameters.onchange)" #end
#if ($parameters.id) id="$!webwork.htmlEncode($parameters.id)" #end
#if ($parameters.cssClass) class="$!webwork.htmlEncode($parameters.cssClass)" #end
#if ($parameters.cssStyle) style="$!webwork.htmlEncode($parameters.cssStyle)" #end
/>
-
-×îºó, ½âÎöcontrolfooter.vm, ¹Ø±Õcontrolheader.vmÖÐÊä³öµÄtrºÍtd.
-
-
#*
-- controlheader.vm
*#
</td>
</tr>
-
ÔÚÎÒÃǵÄÊÓͼÖÐ, ÓÉÓÚtrºÍtdÔªËØÒѾ´´½¨ºÃÁË, ÎÒÃÇÖ»ÐèÒª¼òµ¥µÄÓÃtableÔªËØ½«ËüÃǰü×°ÆðÀ´. ³öÓÚѧϰµÄÔµ¹Ê, ÎÒÃǽöʹÓÃÆÕͨµÄtable¶ÔÏó, µ«Ò²¿ÉÒÔ¿´¿´table.vmµÄÄÚÈÝ.
-
-
<%@ taglib uri="webwork" prefix="ui" %>
<link rel ="stylesheet" type="text/css" href="template/xhtml/styles.css" title="Style" >
<html>
<head> <title> JSP PAGE</title> </head>
<body>
<form>
<table>
<ui:textfield label="'Username'" required="'true'" name="'user'" />
<ui:textfield label="'Email'" name="'email'" />
</table>
</form>
</body>
</html>
-
-
<link rel ="stylesheet" type="text/css" href="template/xhtml/styles.css" title="Style" >
<html>
<head> <title> VM PAGE</title> </head>
<body>
<form>
<table>
#tag( TextField "label='Username'" "name='user'" )<br>
#tag( TextField "label='Email'" "name='email'" )<br>
</table>
</form>
</body>
</html>
-
simple ½öÌṩHTML±êÇ©¶ø²»°üº¬¸½¼Ó¹¦ÄÜ(ÓëstrutsÀàËÆ). ¸ÃÖ÷ÌâÖ»¿¼Âǵײã½á¹¹, ¿ÉÒÔÏñxhmlÄÇÑù¸´ÓÃÒÔÔö¼Ó¶îÍâµÄ¹¦ÄÜ»òÐÐΪ. Äã¿ÉÒÔºÜÈÝÒ×µÄÀ©Õ¹¸ÃÖ÷ÌâÀ´´´½¨Äã×Ô¼ºµÄÖ÷Ìâ, ÒԱ㽨Á¢¸ü¸´ÔÓµÄÒ³ÃæÀ´Âú×ãÒªÇó.
-ʹÓÃÒѶ¨ÒåµÄÖ÷Ìâsimple
-
-
<%@ taglib uri="webwork" prefix="ui" %>
<link rel ="stylesheet" type="text/css" href="template/xhtml/styles.css" title="Style" >
<html>
<head> <title> JSP PAGE</title> </head>
<body>
<form>
<ui:label name="'userlabel'" label="'user" theme="'simple'" />
<ui:textfield name="'user'" theme="'simple'" />
<ui:label name="'emaillabel'" label="'user" theme="'simple'" />
<ui:textfield name="'email'" theme="'simple'" />
</form>
</body>
</html>
-
-
-
-
<link rel ="stylesheet" type="text/css" href="template/xhtml/styles.css" title="Style" >
<html>
<head> <title> VM PAGE</title> </head>
<body>
<form>
#tag( Label "name='userlabel'" "label='user'" "theme='simple'" )
#tag( TextField "name='user'" "theme='simple'" )<br>
#tag( Label "name='emaillabel'" "label='email'" "theme='simple'" )
#tag( TextField "name='email'" "theme='simple'" )<br>
</form>
</body>
</html>
-
´´½¨Ö÷Ìâ·Ç³£¼òµ¥, ²¢ÄÜÔÚ´´½¨¸´ÔÓUIÒ³ÃæÊ±°ïÖúÄã½Úʡʱ¼ä, ×îС»¯´úÂë. ÔÚ¼ÌÐøÖ®Ç°ÍÆ¼öÄãÀí½âWebWorkµÄÄ£°æÏµÍ³(²Î¼ûÄ£°æ ). ʹÓÃÒ»¸öÄ£°æÐèÒªÏÂÁв½Öè.
-
- ¶¨ÒåÖ÷ÌâµÄÃû×Ö²¢ÔÚ/templateĿ¼Ï´´½¨Ò»¸ö×ÓĿ¼. ×ÓĿ¼µÄÃû×ÖÓ¦µ±ºÍÄãÔÚUI±êÇ©themeÊôÐÔÖÐÖ¸¶¨µÄÖµÏàͬ.
-
-
-
<ui:textfield label="'foo'" name="'bar'" theme="'myTheme'" />
-
-
- Ϊÿһ¸öÏëʹÓÃUI±êÇ©´´½¨Ò»¸övelocityÄ£°æ. ÀýÈç, Èç¹û±íµ¥ÖÐÖ»ÓÐtextfieldûÓÐÆäËû¿Ø¼þ, ÄãµÄ×ÓĿ¼ÏÂÖ»ÐèÒªÒ»¸ötext.vmÄ£°æ. ×¢Òâ: Èç¹ûÄã´´½¨Ò»¸ötext.vm²¢ÓÃparse±êÇ©ÒýÓÃÆäËûÄ£°æ, Äã±ØÐëÈ·±£ÕâЩģ°æÒѾ¶¨ÒåºÃÁË(ÀýÈç, controlheader.vm).
- Èç¹ûÏë°ÑеÄÖ÷Ìâ×÷ΪȱʡÖ÷Ìâ, ´Ó¶ø²»ÐèÒªÔÚUI±êÇ©ÖÐÖ¸¶¨themeÊôÐÔ, ÕâÐèÒªÐÞ¸Äwebwork.propertiesÖеÄwebwork.ui.theme. ·ñÔò, ÄãÖ»ÄÜÔÚËùÓÐUI±êÇ©ÖÐÖ¸¶¨themeÊôÐÔ.
- °ÑxhtmlµÄÄÚÈݸ´ÖƵ½ÐµÄĿ¼ÖÐÊÇÒ»¸öºÃµÄ¿ªÊ¼. ÕâÑù, Äã¿ÉÒÔÐÞ¸ÄÄ£°æ, ²¢ÈÔÈ»¿ÉÒÔ°ÑÔʼÄÚÈÝ×÷Ϊ²Î¿¼µã.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Token tag.html b/docs/chinese/wikidocs/Token tag.html
deleted file mode 100644
index 534b89c29..000000000
--- a/docs/chinese/wikidocs/Token tag.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
- WebWork 2 : Token±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by casey .
-
-
-
ÁîÅÆ±êÇ©ÓÃÓÚ½â¾ö"Ë«»÷"Ìá½»ÎÊÌâ. ÕâÐèÒªÉèÖÃTokenInterceptorºÍTokenSessionInterceptor. ¹ØÓÚËûÃǵÄÎĵµ²Î¼ûwiki. ww:token±êÇ©½ö·ÅÖÃÒ»¸ö°üº¬ÎªÒ»ÁîÅÆµÄÒþ²ØÔªËØ.Ó÷¨Ê¾Àý
-
ÊôÐÔ
-
-
- Ãû×Ö ±ØÐè ÃèÊö
-
- name ·ñ ÁîÅÆÃû
-
- theme ·ñ ʹÓõÄÖ÷Ìâ
-
- template ·ñ ʹÓõÄÄ£°æÃû
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Transparent web-app I18N.html b/docs/chinese/wikidocs/Transparent web-app I18N.html
deleted file mode 100644
index 072f12e13..000000000
--- a/docs/chinese/wikidocs/Transparent web-app I18N.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
- WebWork 2 : Transparent web-app I18N
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- Consider adding transparent i18 with simple on-the-fly locale switching to your appliction via I18NInterceptor.
The main idea:
-Interceptor could track locale switch requests, persist selection in current session and set locale for all (or appropriate) actions invoked.
-
-
-
package neuro.util.xwork;
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.Interceptor;
import java.util.Locale;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* I18nInterceptor
* @author Aleksei Gopachenko
*/
public class I18nInterceptor implements Interceptor
{
protected static final Log log = LogFactory.getLog(I18nInterceptor.class);
public static final String DEFAULT_SESSION_ATTRIBUTE = "WW_TRANS_I18N_LOCALE" ;
public static final String DEFAULT_PARAMETER = "request_locale" ;
protected String parameterName = DEFAULT_PARAMETER;
protected String attributeName = DEFAULT_SESSION_ATTRIBUTE;
/**
*/
public I18nInterceptor()
{
if (log.isDebugEnabled()) log.debug("new I18nInterceptor()" );
}
public void setParameterName(String parameterName) {
this .parameterName = parameterName;
}
public void setAttributeName(String attributeName) {
this .attributeName = attributeName;
}
/**
*/
public void init() {
if (log.isDebugEnabled()) log.debug("init()" );
}
/**
*/
public void destroy() {
if (log.isDebugEnabled()) log.debug("destroy()" );
}
/**
*/
public String intercept(ActionInvocation invocation) throws Exception {
if (log.isDebugEnabled()) log.debug("intercept '"
+invocation.getProxy().getNamespace()+"/"
+invocation.getProxy().getActionName()+"' { " );
Object requested_locale = invocation.getInvocationContext().getParameters().get(parameterName);
if (requested_locale!=null && requested_locale.getClass().isArray() && ((Object [])requested_locale).length==1) {
requested_locale=((Object [])requested_locale)[0];
}
if (log.isDebugEnabled()) log.debug("requested_locale=" +requested_locale);
if (requested_locale!=null ) {
Locale locale = (requested_locale instanceof Locale)?
(Locale) requested_locale : localeFromString(requested_locale.toString());
if (log.isDebugEnabled()) log.debug("store locale=" +locale);
if (locale!=null )invocation.getInvocationContext().getSession().put(attributeName,locale);
}
Object locale = invocation.getInvocationContext().getSession().get(attributeName);
if (locale!=null && locale instanceof Locale) {
if (log.isDebugEnabled()) log.debug("apply locale=" +locale);
invocation.getInvocationContext().setLocale((Locale)locale);
}
if (log.isDebugEnabled()) log.debug("before Locale=" +((ActionSupport)invocation.getAction()).getLocale());
final String result = invocation.invoke();
if (log.isDebugEnabled()) log.debug("after Locale=" +((ActionSupport)invocation.getAction()).getLocale());
if (log.isDebugEnabled()) log.debug("intercept } " );
return result;
}
Locale localeFromString(String localeStr) {
if ((localeStr == null ) || (localeStr.trim().length() == 0) || (localeStr.equals("_" ))) {
return Locale.getDefault();
}
int index = localeStr.indexOf('_');
if (index < 0) {
return new Locale(localeStr);
}
String language = localeStr.substring(0,index);
if (index == localeStr.length()) {
return new Locale(language);
}
localeStr = localeStr.substring(index +1);
index = localeStr.indexOf('_');
if (index < 0) {
return new Locale(language,localeStr);
}
String country = localeStr.substring(0,index);
if (index == localeStr.length()) {
return new Locale(language,country);
}
localeStr = localeStr.substring(index +1);
return new Locale(language,country,localeStr);
}
}
-
-Can be enabled for whole package via something like:
-
-
<interceptor name="i18n" class="neuro.util.xwork.I18nInterceptor" >
<!-- on which request parameter we should react, optional, defaults to "request_locale" ->
<param name="parameterName" >set_locale</param>
<!- under which session attribute locale should be stored, optional, defaults to "WW_TRANS_I18N_LOCALE" ->
<param name="attributeName" >ww_locale</param>
</interceptor>
<interceptor-stack name="i18nStack" >
<interceptor-ref name="i18n" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
<default -interceptor-ref name="i18nStack" />
-
-...and invoked in web-app just by adding few links to menu:
-
-
<a href="?set_locale=en" >EN</a>
<a href="?set_locale=ru" >RU</a>
<!- etc -->
-
-Of course you still need to move all explisitly defined messages or labels to appropriate ResourceBundles and make translations. Be sure to check out your
-
- Actions - to use getText(...)
- *-validation.xml files - to use <message key =...>
- results/views - to use WW i18n services by <webwork:text ...> tag, or directly by evaluating getText(...) OGNL expression on current stack.
- If this Interceptor is generally useful, may be it should go into codebase?
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialEnd.html b/docs/chinese/wikidocs/TutorialEnd.html
deleted file mode 100644
index 62b6f5461..000000000
--- a/docs/chinese/wikidocs/TutorialEnd.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- WebWork 2 : TutorialEnd
-
-
-
-
-
-
-
-
-
-
- This page last changed on May 13, 2004 by vitorsouza .
-
-
-
This is the end of the WebWork Tutorial. If you followed the tutorial and understood the concepts that were explained and exemplified, you're ready to start developing your own WebWork application. If you want go deeper into WebWork's details, I suggest you read the Reference Guide at the Documentation Page .
-Previous Lesson
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialExamples.html b/docs/chinese/wikidocs/TutorialExamples.html
deleted file mode 100644
index eff5e5593..000000000
--- a/docs/chinese/wikidocs/TutorialExamples.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- WebWork 2 : TutorialExamples
-
-
-
-
-
-
-
-
-
-
- This page last changed on Sep 16, 2004 by vitorsouza .
-
-
-
The examples supplied in this tutorial are available as a Web Application for you to deploy and run. The file is included in WebWork's binary distribution under the /docs/tutorial folder. You can either deploy it on your Servlet Container or extract the files from the archive using your favorite Zip software.
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson01.html b/docs/chinese/wikidocs/TutorialLesson01.html
deleted file mode 100644
index 561b589f3..000000000
--- a/docs/chinese/wikidocs/TutorialLesson01.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- WebWork 2 : TutorialLesson01
-
-
-
-
-
-
-
-
-
-
- This page last changed on Sep 15, 2004 by vitorsouza .
-
-
-
ʹÓÃWebWorkÊ×ÏÈÐèÒª°²×°WebWork. µ±Ç°°æ±¾¿ÉÒÔÔÚWebWorkµÄÖ÷Ò³ ÉÏÕÒµ½. ±¾Ö¸ÄÏ»ùÓÚ2.1.1°æ±¾, ËüÊDZ¾Îĵ±±àдʱµÄ×îа汾.ÏÂÔØwebwork-2.1.1.zip Ö®ºó, ½âѹµ½ÈÎÒâĿ¼ÏÂ. The libraries that are needed to use WebWorkËùÐèµÄÀà¿â°üÀ¨webwork-2.1.1.jar ºÍlib/core Ŀ¼ÏµÄÈ«²¿JARÎļþ.
ÏÂÒ»¿ÎÖн«Ê¹ÓÃÕâЩÀà¿âÉèÖÃWebÓ¦ÓÃ.
ÏÂÒ»¿Î
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson02.html b/docs/chinese/wikidocs/TutorialLesson02.html
deleted file mode 100644
index 6491991f8..000000000
--- a/docs/chinese/wikidocs/TutorialLesson02.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- WebWork 2 : TutorialLesson02
-
-
-
-
-
-
-
-
-
-
- This page last changed on Sep 16, 2004 by vitorsouza .
-
-
-
ÕâÀï¼Ù¶¨ÄãÒѾÉèÖúÃServletÈÝÆ÷²¢ÖªµÀÈçºÎ´´½¨webÓ¦ÓÃ. Èç¹ûûÓÐ, ½¨ÒéÄãÁ˽âÒ»ÏÂApache Tomcat , ÕâÊÇÒ»¸öÓÉApache JakartaÏîÄ¿¿ª·¢µÄÃâ·ÑµÄServletÈÝÆ÷, Ò²¿ÉÒÔʹÓÃCaucho Technology µÄResin, Ëü¿ÉÒÔÃâ·ÑÓÃÓÚ·ÇÉÌÒµÓÃ;.ҪʹÓÃWebWork, ÐèÒª½«ÉÏÒ»¿ÎÖнéÉܵıØÒªµÄÀà¿â(webwork-2.1.1.jar ºÍlib/core/*.jar )¸´ÖƵ½WebÓ¦ÓõÄWEB-INF/lib Ŀ¼ÖÐ. È»ºó, ÅäÖÃweb.xml ²¡´²½¨ÆðËüµÄÁ½¸öXMLÎļþ: xwork.xml ºÍvalidators.xml . ÕâÈý¸öÎļþ½«ÔÚÏÂÎĽéÉÜ.
ÐÞ¸ÄwebÓ¦ÓõÄweb.xmlÈçÏÂ:
-
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name> My WebWork Application</display-name>
<servlet>
<servlet-name> webwork</servlet-name>
<servlet-class> com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
<load-on-startup> 1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name> webwork</servlet-name>
<url-pattern> *.action</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri> webwork</taglib-uri>
<taglib-location> /WEB-INF/lib/webwork-2.1.1.jar</taglib-location>
</taglib>
</web-app>
-
ҪʹÓÃWebWorkÄã±ØÐë×¢²áServletDispatcher ²¢Ó³Éäµ½*.action . ÕâЩÐÐΪºÎÈç´ËÖØÒª½«ÔÚÏÂÒ»¿Î ÖйØÓڻµÄÕ½ڽøÐнâÊÍ. ÔÚÕâÒ»Àý×ÓÖÐͬʱÉùÃ÷ÁËWebWork±êÇ©¿âÃèÊöÎļþÒÔ±ãʹÓÃWebWork±êÇ©(¹ØÓÚWebWork±êÇ©µÄ¸ü¶àÐÅÏ¢Çë²ÎÔÄ4.1 ) – Èç¹ûÄ㲻ʹÓÃWebWork±êÇ©, ¿ÉÒÔ°²È«µÄɾµôËü.
½øÒ»²½ÔĶÁ: web.xml
-
ÔÚ¸ùÀà·¾¶(Ò²¾ÍÊÇWEB-INF/classes )Öд´½¨Îļþxwork.xml , ÕâÊÇWebWork×ÔÉíµÄÅäÖÃÎļþ. ÏÖÔÚ, ÔÚÎļþÖмÓÈëÏÂÁÐÄÚÈÝ:
-
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
</package>
</xwork>
-
ÕâÖ»ÊÇÅäÖÃÎļþµÄÒ»¸ö¹Ç¼Ü, ÔÚÎÒÃDZéÀúÕû¸öÖ¸ÄϵĹý³ÌÖÐ, Ëü½«²»¶ÏµÄÔö³¤. ĿǰΪֹ, ËüÖ»×öÁ½¼þÊÂÇé:
- ֪ͨWebWorkÐèÒª´Ówebwork-default.xml (λÓÚwebwork-2.1.1.jar µÄ¸ùĿ¼Öв¢Ò»Ö±¿ÉÓÃ)Öе¼ÈëÅäÖÃÐÅÏ¢ – ¸ÃÎļþ¶¨ÒåÁ˰üwebwork-default , Ëü°üº¬ÁËWebWorkÓ¦ÓÃËùÐèµÄȱʡ ÅäÖÃ;
-
-
- ¶¨ÒåÁËÒ»¸ödefault °ü, »î¶¯(actions), ½á¹û(results)ºÍ½ØÈ¡Æ÷(interceptors)½«×¢²áÔÚÆäÖÐ. Õâ¸ö°ü»¹À©Õ¹(extends)ÁËwebwork-default , Ò²¾ÍÊÇ˵, default °ü½«¼Ì³Ð(inherit)¶¨ÒåÔÚwebwork-default ÖеÄÈ«²¿ÅäÖÃ.
-
- ½øÒ»²½ÔĶÁ: xwork.xml
-
ÔÙ´ÎÔÚ¸ùÀà·¾¶Öд´½¨Îļþvalidators.xml , ²¢ÏÂÁÐÄÚÈݰüº¬:
-
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<validator name="required"
class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator" />
<validator name="requiredstring"
class="com.opensymphony.xwork.validator.validators.RequiredStringValidator" />
<validator name="int"
class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator" />
<validator name="date"
class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator" />
<validator name="expression"
class="com.opensymphony.xwork.validator.validators.ExpressionValidator" />
<validator name="fieldexpression"
class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator" />
<validator name="email"
class="com.opensymphony.xwork.validator.validators.EmailValidator" />
<validator name="url"
class="com.opensymphony.xwork.validator.validators.URLValidator" />
<validator name="visitor"
class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator" />
<validator name="conversion"
class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator" />
</validators>
-
¸ÃÎļþ¶¨Òå¿ÉÓõÄУÑéÆ÷.
½øÒ»²½ÔĶÁ: УÑé
-
ÏÖÔÚÒ»¸öWebWorkÓ¦ÓõĹǼÜÒѾÅäÖÃÍê³É. ÏÂÒ»¿Î½«Ñ§Ï°ÈçºÎʹÓÃWenWorkµÄ»î¶¯, ÊÓͼºÍ½ØÈ¡Æ÷.
ÉÏÒ»¿Î | ÏÂÒ»¿Î
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson03.html b/docs/chinese/wikidocs/TutorialLesson03.html
deleted file mode 100644
index 733bd0347..000000000
--- a/docs/chinese/wikidocs/TutorialLesson03.html
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
- WebWork 2 : TutorialLesson03
-
-
-
-
-
-
-
-
-
-
- This page last changed on Sep 16, 2004 by vitorsouza .
-
-
-
»î¶¯(Action)ÊdzÌÐòÖ´ÐеĻù±¾µ¥Ôª. »î¶¯ÊÇÒ»¸ö×¢²áÔÚWebWorkÅäÖÃÎļþÖÐÓÃÒÔÏìӦijһÇëÇóµÄÀà. ÔÚÄ£ÐÍ-ÊÓͼ-¿ØÖÆÆ÷·½Ê½ÖÐ, »î¶¯ÊÇ¿ØÖÆÆ÷µÄÒ»²¿·Ö, Áô¸øJSPÒ³ÃæµÄÊÇËûÃÇ×îÉó¤µÄ¹¤×÷: ´´½¨ÊÓͼ.ÏÂÃæÊÇÔÚWenWorkÖд´½¨»î¶¯µÄ¿ÉÄܵIJ½Öè:
- ´´½¨Ò»¸öµ÷ÓûµÄJSPÒ³Ãæ;
- ´´½¨Ò»¸ö»î¶¯Àà;
- ´´½¨Ò»¸ö´¦Àí½á¹ûµÄJSPÒ³Ãæ;
- ÔÚxwork.xml ÖÐ×¢²á»î¶¯.
-
-±¾Ö¸ÄϵĵÚÒ»¸öÀý×ÓÕýÊÇ"Hello, WebWorld!" . ÏÂÃæµÄ´úÂëչʾÁ˺¬ÓÐÒ»¸ö»î¶¯ÅäÖÃÐÅÏ¢µÄWebWorkÅäÖÃÎļþxwork.xml , ¸Ã»î¶¯×¢²áÔÚdefault °üÖÐ.
-
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<default-interceptor-ref name="defaultStack" />
<action name="helloWebWorld" class="lesson03.HelloWebWorldAction" >
<result name="success" type="dispatcher" > ex01-success.jsp</result>
</action>
</package>
</xwork>
-
²»ÐèÒª¹ØÐÄdefault-interceptor-ref . ĿǰÎÒÃǽö¹Ø×¢»î¶¯. Õâ¸öÅäÖÃÎļþ¸æËßWebWorkÒ»¸öÃûΪhelloWebWorld µÄ»î¶¯ÓÉÀàlesson03.HelloWebWorldAction ʵÏÖ. ¶ÔÓÚÕâÒ»»î¶¯, ÎÒÃǶ¨ÒåÁËÒ»¸öÃûΪsuccess µÄ½á¹û, ËüÖ¸ÏòÒ³Ãæex01-success.jsp .
-
- ½øÒ»²½ÔĶÁ: xwork.xml Ò»µ©ÎÒÃÇ¿´µ½µ÷ÓûµÄ´úÂë, Ò»Çлá±äµÃÇåÎú:
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 3 - Example 1</title>
</head>
<body>
<p>Click the button below to activate HelloWebWorldAction.</p>
<form action="helloWebWorld.action" method="post" >
<p><input type="submit" value="Hello!" /></p>
</form>
</body>
</html>
-
Õâ¾ÍÊÇÒ³ÃæÓëWebWorkÏà½áºÏµÄ·½Ê½: ͨ¹ý·ÃÎÊ*.action µØÖ·. »ØÏëÉÏÒ»¿Î, Õâ¾ÍÊÇÎÒÃÇΪʲôע²áServletDispatcher ²¢½«ËüÓ³Éäµ½*.action µÄÔÒò.
µ±ÎÒÃǵã»÷Àý×ÓÒ³ÃæÉϵݴťʱ, ä¯ÀÀÆ÷½«°Ñ±íµ¥Êý¾Ý·¢Ë͵½µØÖ·helloWebWorld.action . ÓÉÓÚÕâ¸öµØÖ··ûºÏÓ³Éä*.action , ServletÈÝÆ÷½«¼¤»îWebWorkµÄServletDispatcher , Ëü½«¶Á³öxwork.xml ²¢²éÕÒÃûΪhelloWebWorld µÄ»î¶¯. Èç¹ûÕÒµ½ÁË, »î¶¯ÀàµÄÒ»¸öÐÂµÄ ÊµÀý½«±»´´½¨²¢ÇÒ·½·¨execute() ½«±»Ö´ÐÐ.ÏÈÀ´¿´¿´»î¶¯Àà:
-
-
package lesson03;
import com.opensymphony.xwork.ActionSupport;
public class HelloWebWorldAction extends ActionSupport {
String hello;
public String getHello() {
return hello;
}
public String execute() throws Exception {
hello = "Hello, WebWorld!" ;
return SUCCESS;
}
}
-
Ê×ÏÈ, ¸ÃÀàÀ©Õ¹ÁËcom.opensymphony.xwork.ActionSupport ²¢ÊµÏÖÁË·½·¨public String execute() . ¶ÔÓÚÐÂÊÖ¶øÑÔ, ËùÓеĻÀà¶¼Ó¦µ±ÕâÑù±àд. Æä´Î, execute() ·½·¨½öÉèÖÃÁËhello ÊôÐÔ(property)µÄÖµ²¢·µ»ØÖµÎª"success" µÄ×Ö·û´®³£Á¿SUCCESS .
µ±ServletDispatcherµÃµ½execute() µÄ·µ»ØÖµ"success" ºó, ÔÙ´ÎÔÚxwork.xml ÖвéÕÒÓësuccessͬÃûµÄ½á¹û, ÈçÅäÖÃÎļþËùÃèÊöµÄ, ÕÒµ½²¢Ç°½øµ½ex01-success.jsp . ÈÃÎÒÃÇ¿´¿´Õâ¸öÒ³Ãæ×öÁËʲô:
-
-
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 3 - Example 1</title>
</head>
<body>
<ww:property value="hello" />
</body>
</html>
-
Èç¹ûÔËÐÐÕâ¸öÀý×Ó, Äã»á·¢ÏÖÒ³ÃæÉÏÏÔʾ×Å"Hello, WebWorld!" . ¿´ÆðÀ´ÊÇÒòΪ<ww:property value="hello" /> ±êÇ©ÔÚ¸Õ¸ÕÖ´ÐеĻÀàÖвéÕÒÁËÊôÐÔhello . ÊÂʵÉÏ, ¸Ã±êÇ©²éÕÒÒ³¸ö´æÈ¡Æ÷(accessor)·½·¨, Òò´Ë×îÖÕµ÷ÓÃÁËgetHello() . ÓÉÓÚHelloWebWorldAction ±»µ÷Óò¢½«ÊôÐÔhelloÉèÖÃΪ"Hello, WebWorld!" , Òò´ËgetHello() ·µ»Ø¸ÃÖµ²¢±»½á¹ûÒ³ÃæÓÃÓÚÏÔʾ.
ÊÔÒ»ÊÔÕâ¸öÀý×Ó!
-
ÉÏÒ»¸öÀý×ÓÑÝʾÁËWebWorkµÄ»î¶¯ÊÇÈçºÎ¹¤×÷µÄ, µ«Èç¹û²»ÄÜΪ»î¶¯ÌṩÊý¾ÝÎÒÃǾͲ»ÄÜ×ö¸ü¶à. ÈÃÎÒÃÇ¿´Ò»¸öÕâÑùµÄÀý×Ó:
-
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<default-interceptor-ref name="defaultStack" />
<action name="hello" class="lesson03.HelloAction" >
<result name="error" type="dispatcher" > ex02-index.jsp</result>
<result name="success" type="dispatcher" > ex02-success.jsp</result>
</action>
</package>
</xwork>
-
-
-
package lesson03;
import com.opensymphony.xwork.ActionSupport;
public class HelloAction extends ActionSupport {
String person;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this .person = person;
}
public String execute() throws Exception {
if ((person == null ) || (person.length() == 0)) return ERROR;
else return SUCCESS;
}
}
-
-
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 3 - Example 2</title>
</head>
<body>
<p>What's your name?</p>
<form action="hello.action" method="post" >
<p><input type="text" name="person" /><input type="submit" /></p>
</form>
</body>
</html>
-
-
-
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 3 - Example 2</title>
</head>
<body>
Hello, <ww:property value="person" />
</body>
</html>
-
ÈÃÎÒÃÇ·ÖÎöһϲî±ð: ±¾ÀýÖÐÎÒÃÇͨ¹ýPOST·½Ê½·¢ËÍÃûΪperson µÄ±íµ¥Êý¾Ý. ÕâÑù, ÔÚHelloAction еÄʵÀý´´½¨Ö®ºó, WebWorkµÄServletDispatcher ½«ÊÔͼʹÓ÷¢Ë͵ÄÊý¾ÝÌî³ä»î¶¯µÄÊôÐÔperson , Òò´Ëµ÷ÓÃÑÆ(mutator)·½·¨setPerson() (ÊÂʵÉÏ, ÕâÒ»²½¹¤×÷ÊÇÓÉParametersInterceptor Íê³ÉµÄ, ÎÒÃǽ«ÔÚµÚÎå¿Î ÖÐѧµ½ – Ŀǰ, Ö»ÐèÒªÖªµÀµ±»î¶¯Ö´ÐÐʱ, ÊôÐÔÒѾ±»ÉèÖÃÁË).
Èç¹ûÄã²é¿´»î¶¯ÀàµÄ´úÂë, Äã»á·¢ÏÖÔÚexecute() ÆÚ¼ä, ½«¼ì²éÊôÐÔÊÇ·ñÒÑÌîд(Ò²¾ÍÊÇ˵±íµ¥×Ö¶ÎÊÇ·ñÌṩÁËÊý¾Ý). Èç¹ûÒÑÌîд, ½«·µ»ØSUCCESS , ´Ó¶ø½«ÇëÇó·Ö·¢µ½ex02-success.jsp , ·ñÔò, ·µ»ØERROR , ·µ»Øex02-index.jsp .
-
- ÊÔÒ»ÊÔÕâ¸öÀý×Ó!
-
ͨ¹ýÉÏÃæµÄÀý×Ó, µ±ÎÒÃÇÌáµ½Ò»¸ö½á¹ûÊÇ"dispatcher" ÀàÐÍʱÒâζ×ÅWebWork²éÕÒÒ»¸öÃûΪdispatcher µÄ ½á¹ûÀàÐÍ ²¢ÕÒ³öËüÓÉÄĸö½á¹ûÀàʵÏÖ. Ö»Òª»î¶¯·µ»Ø¸ÃÀàÐ͵Ľá¹û, ¸Ã½á¹ûÀàµÄÒ»¸öʵÀý¾Í±»¼¤»î.½á¹ûÀàʵÏÖÁËcom.opensymphony.xwork.Result ½Ó¿Ú. WebWork¸½´øÒ»Ð©ÒÑʵÏֵĽá¹ûÀà, µ«Èç¹ûÐèÒª, Ò²¿ÉÒÔ¹¹½¨×Ô¼ºµÄ½á¹ûÀà. WebWork¸½´øµÄ½á¹ûÀàÐÍÒѾÅäÖÃÔÚwebwork-default.xml ÖÐ:
- dispatcher (com.opensymphony.webwork.dispatcher.ServletDispatcherResult ): ½«½á¹ûת·¢µ½Ö¸¶¨µÄµØÖ·;
-
-
- redirect (com.opensymphony.webwork.dispatcher.ServletRedirectResult ): ½«½á¹ûÖØ¶¨Ïòµ½Ö¸¶¨µÄµØÖ·. Óëdispatcher²»Í¬, ÖØ¶¨Ïò²»ÏòÖ¸¶¨µÄÒ³Ãæ·¢ËÍ±íµ¥Êý¾Ý(ͨ¹ýPOST»òGET);
-
-
- velocity (com.opensymphony.webwork.dispatcher.VelocityResult ): ʹÓÃÒ»¸öVelocityÄ£°æ×÷Ϊ½á¹û. You could use the dispatcher to forward results to Velocity pages if you haveÈç¹ûÄãÔÚweb.xml ÖÐÅäÖÃÁË VelocityServlet , Äã¾Í¿ÉÒÔʹÓÃdispatcher½«½á¹ûת·¢µ½VelocityÒ³Ãæ, ²»¹ýʹÓÃVelocity½á¹ûÊǸüºÃµÄ·½Ê½. ¹ØÓÚVelocityµÄ¸ü¶àÐÅÏ¢Çë²ÎÔÄ4.2 ;
-
-
- chain (com.opensymphony.xwork.ActionChainResult ): ½«Ò»¸ö»î¶¯Á´½ÓÔÚÁíÒ»¸ö»î¶¯ÉÏ, Ò²¾ÍÊÇ˵, Ò»¸ö»î¶¯µÄ½á¹ûÊÇÁíÒ»¸ö»î¶¯;
-
-
- xslt (com.opensymphony.webwork.views.xslt.XSLTResult ): ÓÃÒ»¸öÓÉXSLTÑùʽµ¥×ª»»µÄXMLÎĵµ×÷Ϊ½á¹û.
-
- ½øÒ»²½ÔĶÁ: ½á¹ûÀàÐÍ(Result Types)
-
ÉÏÊöÀý×ÓչʾÁ˻ºÍ½á¹ûµÄÖ÷Òª¸ÅÄî: ËüÃÇÊÇÏìÓ¦ÇëÇóµÄ´úÂëÖ´Ðеĵ¥Ôª, Íê³ÉijЩ´¦ÀíÈ»ºó¸ù¾Ý½á¹û½«ÇëÇóת·¢µ½ÆäËûµØÖ·. ËäÈ»ÕâЩ¿´ÆðÀ´·Ç³£¼òµ¥, ËüÈ´ÊÇWebWork¹¦ÄܵĺËÐÄ. ÏÂÃæÁгöµÄÁíһЩ¿ÉÒÔÓûʵÏÖµÄÄÚÈÝ, ½ö½öÊÇÔÚ¼ÌÐø½øÐе½ÆäËû¿Î³ÌǰÈÃÄãÁ˽⵽WebWork¿ÉÒÔ×öµ½ÄÄЩ:
- ʹÓýØÈ¡Æ÷, ¿ÉÒԼǼÿһ¸ö»î¶¯µÄÖ´ÐÐÉõÖÁ¼ÆËãÖ´ÐÐʱ¼ä(µÚÎå¿Î );
-
-
- ͨ¹ýʵÏÖModelDriven½Ó¿Ú, »î¶¯¿ÉÒÔÖ±½Ó²Ù×÷ÒµÎñ¶ÔÏó;
-
-
- ¶Ô·¢Ë͵½actionµÄÊý¾ÝµÄУÑ鹿Ôò¿ÉÒÔÔÚXMLÎļþÖÐÅäÖÃ. Èç¹ûijЩÊý¾Ý²»·ûºÏÄãµÄ¹æ·¶, »î¶¯²»»áÖ´ÐÐ, ͬʱ´íÎóÐÅÏ¢»áÁ¬½Óµ½¸Ã»î¶¯(²Î¼û: УÑé );
-
-
- ͨ¹ý½«WebWork UI±êÇ©ÓëУÑé¿ò¼ÜÏà¹ØÁª, ±íµ¥Äܹ»×Ô¶¯ÏÔʾÓÉÎÞЧÊäÈëµ½ÖµµÄ´íÎóÐÅÏ¢(4.1.1 );
-
-
- WebWorkÄܹ»×Ô¶¯ÎªÄ³Ð©»î¶¯Ìṩ×é¼þ, ²¢ÔÊÐí·´×ª¿ØÖÆ(²Î¼û: [·´×ª¿ØÖÆÓë×é¼þ] );
-
-ÏÂÒ»¿Î½«ÌÖÂÛWebWorkÄܹ»Ê¹ÓõIJ»Í¬ÀàÐ͵ÄÊÔͼ.
ÉÏÒ»¿Î | ÏÂÒ»¿Î
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson04-01-01.html b/docs/chinese/wikidocs/TutorialLesson04-01-01.html
deleted file mode 100644
index 0e82bad61..000000000
--- a/docs/chinese/wikidocs/TutorialLesson04-01-01.html
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
- WebWork 2 : TutorialLesson04-01-01
-
-
-
-
-
-
-
-
-
-
- This page last changed on Sep 16, 2004 by vitorsouza .
-
-
-
ÔÚWebWorkÖÐ, UI±êÇ©°ü×°ÁËHTML¿Ø¼þÒÔ±ãÓëºËÐÄ¿ò¼Ü½ôÃܼ¯³É. ÕâЩ±êÇ©Éè¼ÆÄ¿±êÊÇ×îС»¯´úÂëÖеÄÂß¼²¿·Ö, ²¢ÓÃÒ»¸öÄ£°æÏµÍ³´úÀí×îÖÕµÄHTML»æÖÆ. UI±êÇ©ÊÔͼ¸²¸Ç×îÆÕ±éµÄÇé¾°(scenario), ²¢ÌṩÁËÒ»¸öcomponent±êÇ©ÒÔ´´½¨¶¨ÖÆ×é¼þ.UI±êÇ©»¹ÄÚ½¨Ö§³ÖÏÔʾÄÚǶµÄ´íÎóÐÅÏ¢.±¾½Ú½âÊÍÈçºÎÀûÓÃUI±êÇ©µÄÓŵ㹹½¨±íµ¥ºÍÆäËûͼÐοؼþ, ²¢Í¨¹ý½²½âÄ£°æÏµÍ³µÄ¹¤×÷ÔÀí, ѧϰÈçºÎÐÞ¸ÄÒÑÓÐ×é¼þµÄÍâ¹ÛÒÔ¼°¶¨ÖÆÐÂ×é¼þ.
WebWorkÌṩÏֳɵÄÓÃÓÚ¹¹½¨±íµ¥µÄ±êÇ©. ÆäÖÐһЩ±êÇ©µÄÃû×Ö¿ÉÒÔºÍHTML±êÇ©Ãû×ÖÖ±½ÓÁªÏµÆðÀ´, ͨ¹ýÃû×ÖÄã¾Í¿ÉÒÔÁì»áËüµÄÓÃ;: <ww:checkbox /> , <ww:file /> , <ww:form /> , <ww:hidden /> , <ww:label /> , <ww:password /> , <ww:radio /> , <ww:select /> , <ww:submit /> , <ww:textarea /> ºÍ<ww:textfield /> .
ҪʹÓÃÕâЩ±êÇ©¹¹½¨±íµ¥, Ö»Ðè°ÑËüÃÇÏñHTML±êÇ©ÄÇÑù·ÅÔÚÒ³ÃæÉÏ. ΨһµÄÇø±ðÊDzÎÊýÓ¦µ±ÓÃË«ÒýºÅºÍµ¥ÒýºÅÀªÆðÀ´(key="'value'" ). ÕâÊÇÒòΪ·Çµ¥ÒýºÅµÄÃû³Æ½«Ê¹ÓÃÖµÕ»ÖØÐ¸³Öµ.È»ÎÒÃÇ¿´¿´Õâ¸öÀý×Ó:
-
-
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1.1 - Example 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" >
<style type="text/css" >
.errorMessage { color: red; }
</style>
</head>
<body>
<p>UI Form Tags Example:</p>
<ww:form action="'formProcessing.action'" method="'post'" >
<ww:checkbox name="'checkbox'" label="'A checkbox'" fieldValue="'checkbox_value'" />
<ww:file name="'file'" label="'A file field'" />
<ww:hidden name="'hidden'" value="'hidden_value'" />
<ww:label label="'A label'" />
<ww:password name="'password'" label="'A password field'" />
<ww:radio name="'radio'" label="'Radio buttons'" list="{'One', 'Two', 'Three'}" />
<ww:select name="'select'" label="'A select list'" list="{'One', 'Two', 'Three'}"
emptyOption="true " />
<ww:textarea name="'textarea'" label="'A text area'" rows="'3'" cols="'40'" />
<ww:textfield name="'textfield'" label="'A text field'" />
<ww:submit value="'Send Form'" />
</ww:form>
</body>
</html>
-
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1.1 - Example 1</title>
<style type="text/css" >
.errorMessage { color: red; }
</style>
</head>
<body>
<p>UI Form Tags Example:</p>
<table>
<form
action="formProcessing.action" method="post" >
<tr>
<td valign="top" colspan="2" >
<table width="100%" border="0" cellpadding="0" cellspacing="0" >
<tr><td valign="top" >
<input type="checkbox"
name="checkbox"
value="checkbox_value"
/>
</td>
<td width="100%" valign="top" >
<span class="checkboxLabel" >
A checkbox
</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="right" valign="top" >
<span class="label" >
A file field:
</span>
</td>
<td>
<input type="file"
name="file"
/>
</td>
</tr>
<input
type="hidden"
name="hidden" value="hidden_value" />
<tr>
<td align="right" valign="top" >
<span class="label" >
A label:
</span>
</td>
<td>
<label> </label>
</td>
</tr>
<tr>
<td align="right" valign="top" >
<span class="label" >
A password field:
</span>
</td>
<td>
<input type="password"
name="password"
/>
</td>
</tr>
<tr>
<td align="right" valign="top" >
<span class="label" >
Radio buttons:
</span>
</td>
<td>
<input
type="radio"
name="radio"
id="radioOne"
value="One" />
<label for ="radioOne" >One</label>
<input
type="radio"
name="radio"
id="radioTwo"
value="Two" />
<label for ="radioTwo" >Two</label>
<input
type="radio"
name="radio"
id="radioThree"
value="Three" />
<label for ="radioThree" >Three</label>
</td>
</tr>
<tr>
<td align="right" valign="top" >
<span class="label" >
A select list:
</span>
</td>
<td>
<select name="select"
>
<option value=""></option>
<option value=" One"
>One</option>
<option value=" Two"
>Two</option>
<option value=" Three"
>Three</option>
</select>
</td>
</tr>
<tr>
<td align=" right" valign=" top">
<span class=" label">
A text area:
</span>
</td>
<td>
<textarea name=" textarea"
cols=" 40"
rows=" 3"
></textarea>
</td>
</tr>
<tr>
<td align=" right" valign=" top">
<span class=" label">
A text field:
</span>
</td>
<td>
<input type=" text"
name=" textfield"
/>
</td>
</tr>
<tr>
<td colspan=" 2"><div
align=" right" ><input
type=" submit"
value=" Send Form" /></div>
</td>
</tr>
</form>
</table>
</body>
</html>
-
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<action name="formProcessing" class="lesson04_01_01.FormProcessingAction" >
<result name="input" type="dispatcher" > ex01-index.jsp</result>
<result name="success" type="dispatcher" > ex01-success.jsp</result>
<interceptor-ref name="validationWorkflowStack" />
</action>
</package>
</xwork>
-
-
-
package lesson04_01_01;
import com.opensymphony.xwork.ActionSupport;
public class FormProcessingAction extends ActionSupport {
private String checkbox;
private String file;
private String hidden;
private String password;
private String radio;
private String select;
private String textarea;
private String textfield;
public String getCheckbox() { return checkbox; }
public String getFile() { return file; }
public String getHidden() { return hidden; }
public String getPassword() { return password; }
public String getRadio() { return radio; }
public String getSelect() { return select; }
public String getTextarea() { return textarea; }
public String getTextfield() { return textfield; }
public void setCheckbox(String checkbox) { this .checkbox = checkbox; }
public void setFile(String file) { this .file = file; }
public void setHidden(String hidden) { this .hidden = hidden; }
public void setPassword(String password) { this .password = password; }
public void setRadio(String radio) { this .radio = radio; }
public void setSelect(String select) { this .select = select; }
public void setTextarea(String textarea) { this .textarea = textarea; }
public void setTextfield(String textfield) { this .textfield = textfield; }
public String execute() throws Exception {
return SUCCESS;
}
}
-
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="checkbox" >
<field-validator type="requiredstring" >
<message> Please, check the checkbox.</message>
</field-validator>
</field>
<field name="file" >
<field-validator type="requiredstring" >
<message> Please select a file.</message>
</field-validator>
</field>
<field name="password" >
<field-validator type="requiredstring" >
<message> Please type something in the password field.</message>
</field-validator>
</field>
<field name="radio" >
<field-validator type="requiredstring" >
<message> Please select a radio button.</message>
</field-validator>
</field>
<field name="select" >
<field-validator type="requiredstring" >
<message> Please select an option from the list.</message>
</field-validator>
</field>
<field name="textarea" >
<field-validator type="requiredstring" >
<message> Please type something in the text area.</message>
</field-validator>
</field>
<field name="textfield" >
<field-validator type="requiredstring" >
<message> Please type something in the text field.</message>
</field-validator>
</field>
</validators>
-
-
-
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1.1 - Example 1</title>
</head>
<body>
<p>UI Form Tags Example result:</p>
<ul>
<li>checkbox: <ww:property value="checkbox" /></li>
<li>file: <ww:property value="file" /></li>
<li>hidden: <ww:property value="hidden" /></li>
<li>password: <ww:property value="password" /></li>
<li>radio: <ww:property value="radio" /></li>
<li>select: <ww:property value="select" /></li>
<li>textarea: <ww:property value="textarea" /></li>
<li>textfield: <ww:property value="textfield" /></li>
</ul>
</body>
</html>
-
Çë×¢ÒâÓëHTML½á¹ûÏà±È, ex01-index.jsp ÒªÇåÎúµÄ¶à. ±íµ¥×é¼þµÄȱʡ²¼¾ÖÊÇÒ»¸öÎÄ×Ö±êÇ©ÔÚ×ó²à, ÊäÈë×Ö¶ÎÔÚÓÒ²àµÄ±í¸ñ²¼¾Ö. ÔÚÏÂÎĽâÊÍÁËÄ£°æÏµÍ³ºó, ÎÒÃÇ¿ÉÒÔÖªµÀͼºÍ´´½¨×Ô¼ºµÄ²¼¾Ö.ÁíÍâÐèҪעÒâµÄÊÇÔڻÅäÖÃÖжÔvalidationWorkflowStack µÄÒýÓÃ. ËüÒªÇóWebWork°´ÕÕÓڻÀàλÓÚͳһλÖõÄÅäÖÃÎļþУÑé·¢Ë͵½»î¶¯ÖеÄÊý¾Ý, ±¾ÀýÖÐÊÇFormProcessingAction-validation.xml (²Î¼ûУÑé ). Èç¹ûijЩÊý¾Ý²»ÕýÈ·, Õ⽫²»Ö´Ðл²¢½«ÇëÇóת·¢µ½ÊäÈëÒ³Ãæ, ͬʱ½«´íÎóÐÅÏ¢¸½¼ÓÔÚÿһ×Ö¶ÎÉÏ(ʹÓ÷½·¨addFieldError(String fieldName, String errorMessage) ).
µ«ÊÇÎÒÃÇÏÖÔÚ²»±Ø¹ØÐÄУÑé¿ò¼ÜÈçºÎ¹¤×÷. ÔËÐиÃÀý×Ó²¢ÊÔ×ÅÈÃijЩ×ֶοÕ×Å. Äã»á¿´µ½UI±êÇ©ÏÔʾ³öÓëУÑé¿ò¼Ü¼¯³ÉµÄ´íÎóÐÅÏ¢, ¶øÕâÒ²ÊÇÎÒÃÇÒªÏòÄãÑÝʾµÄ. ·ÖÀë¹Ø×¢µãÄܹ»°ïÖú³ÌÐòÔ±ºÍÉè¼ÆÈËÔ±¸ü¹Ø×¢×Ô¼ºµÄÄDz¿·Ö¹¤×÷.
-
- ½øÒ»²½ÔĶÁ: UI±êÇ©
-
- ÊÔÊÔÕâ¸öÀý×Ó!
-
³ýÁËHTMLÉè¼ÆÈËÔ±ÒѾÊìϤµÄ±ê×¼±íµ¥¿Ø¼þÍâ, WebWork»¹ÌṩÁËÆäËûһЩ¿Õ¼ä²¢ÇÒÒ²ÄÜ´´½¨¶¨ÖÆ×é¼þ. ÈÃÎÒÃÇ¿´Ò»¿´WebWorkÌṩµÄÕâЩ¿Ø¼þ:
-
-
-
-<ww:checkboxlist /> Óë<ww:radio /> ±êÇ©µÄ¹¦ÄÜÏàËÆ, µ¥Ê¹Óø´Ñ¡¿ò(checkbox)¶ø²»Êǵ¥Ñ¡°´Å¥(radio button). Ëü´Ó¼¯ºÏÖлñÈ¡¼üÖµºÍÖµÀ´´´½¨Ò»×é¾ßÓÐÏàͬÃû×ֵĸ´Ñ¡¿ò.
-
-<ww:combobox /> Ä£·ÂÒ»¸ö×éºÏ¿ò(combobox), »ìºÏÁËÒ»¸öÑ¡ÏîÁбíºÍÒ»¸öÎı¾¿ò. ËüÔÚÒ»¸ö<select /> ÁбíÉÏ·ÅÖÃÁËÒ»¸öÎı¾¿ò, ÿһ´ÎÑ¡ÏîÁбíÖµ·¢Éú±ä»¯Ê±ÀûÓÃJavaScript´úÂëÌîÈëÎı¾¿òÖÐ.
-
-<ww:tabbedpane /> Õⲿ·ÖÄÚÈÝÐèÒª°ïÖú.
-
-<ww:token /> Õⲿ·ÖÄÚÈÝÐèÒª°ïÖú.
-
-
- ½øÒ»²½ÔĶÁ: UI Tags
-
WebWorkʹÓÃVelocityÄ£°æÏµÍ³ÎªÃ¿¸öUI±êÇ©»æÖÆ×îÖÕµÄHTML. ËùÓÐÄ£°æµÄȱʡʵÏÖÒѾ°üº¬ÔÚºËÐÄ·¢ÐаüÖв¢ÔÊÐíÓû§'´òÆÆ³£¹æ'ʹÓÃUI±êÇ©. Ä£°æ¿ÉÒÔ·Ö±ðÐ޸ĻòÕû¸öÌæ»»ÒÔ±ãÍêÈ«¶¨ÖÆHTMLÊä³ö½á¹û. ÁíÍâ, ÿһ¸ö±êÇ©¶¼¿ÉÒÔÑ¡Ôñ¸²¸Çȱʡģ°æ´Ó¶øÔÊÐí½øÐо«Ï¸µÄ¿ØÖÆ. ȱʡģ°æÎ»ÓÚÎļþwebwork-2.1.1.jar µÄ/template/xhtml Ŀ¼ÏÂ.Èç¹ûÄã½â¿ªwebwork-2.1.1.jar ²¢²é¿´Ä¿Â¼/template/xhtml ¾Í»á·¢ÏÖÒ»×évelocityÄ£°æÎļþ. ´ó²¿·ÖÓëijһUI±êÇ©Ïà¶ÔÓ¦, Ãû³ÆÒ²Óë±êÇ©Ïàͬ. Èç¹ûÄãÒѾÊìϤÁËVelocity, ÍÆ¼öÄã·ÖÎöÕâЩģ°æÎļþ¿´¿´ÄãÄܶÔËûÃÇ×öʲô. ´Ó2.1°æ±¾¿ªÊ¼, »¹ÓÐÒ»¸öĿ¼/template/simple , ÕâÀïÓÐÒ»¸öHTML±íµ¥¿Ø¼þµÄ¸ü¼òµ¥°æ±¾(½ö°üº¬¿Ø¼þ, ûÓбí¸ñºÍÎı¾±êÇ©).
Èç¹ûÄãÏëÓò»Í¬ÓÚWebWork×Ô´øµÄ²¼¾ÖÏÔʾÄãµÄUI×é¼þ, Äã¿ÉÒÔ:
-
-
- ±à¼²¢Ìæ»»/template/xhtml Ŀ¼ÏµÄÎļþ(ÖØÐ´ò°üJarÎļþ»òÔڱ𴦴´½¨ÏàͬµÄĿ¼½á¹¹²¢È·±£WebÈÝÆ÷Äܹ»ÔÚJarÎļþ֮ǰÕÒµ½Ëü);
-
-
- ͨ¹ýÐÞ¸ÄÎļþwebwork.properties (Ó¦µ±Î»ÓÚ¸ùÀà·¾¶ÖÐ)ÖеÄwebwork.ui.theme ÊôÐÔÀ´¸Ä±äÄ£°æÄ¿Â¼;
-
-
- ʹÓÃÖ÷Ìâ(theme)»òÄ£°æÊôÐÔ·Ö±ðΪÿ¸ö±êǩָ¶¨Ä£°æÎ»ÖÃ. ÕâÖÖ·½·¨ÔÊÐíÖ¸¶¨È«²¿Ä£°æËùÔÚµÄĿ¼(WebWorkÓÃÓë/template/xhtml Ŀ¼ÏÂÏàͬµÄÎļþÃû²éÕÒÄ£°æÎļþ), ÕâÔÊÐíÄ㾫ȷµÄÖ¸¶¨×é¼þËùʹÓõÄÄ£°æ.
-
- ½øÒ»²½ÔĶÁ: Ä£°æ , Ö÷Ìâ ÏÂÃæµÄÀý×ÓÖÐÑÝʾÁ˵ÚÈýÖÖ·½Ê½. ÐèҪעÒâµÄÊÇ, ȱʡÇé¿öÏÂ, Ö¸¶¨µÄÖ÷ÌâĿ¼Ӧµ±Î»ÓÚ/template Ŀ¼ÏÂ, Ö¸¶¨µÄÄ£°æÎļþÓ¦µ±Î»ÓÚ/template/xhtml Ŀ¼ÏÂ.
-
-
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1.1 - Example 2</title>
</head>
<body>
<p>Template Change Example:</p>
<p><ww:checkbox name="'checkbox'" label="'A checkbox'" fieldValue="'checkbox_value'" theme="'mytheme'" /></p>
<p><ww:textfield name="'textfield'" label="'A text field'" template="mytextfield.vm" /></p>
</body>
</html>
-
-
-
<div align="center" >
<input type="checkbox"
name="$!webwork.htmlEncode($parameters.name)"
value="$!webwork.htmlEncode($parameters.fieldValue)"
#if ($parameters.nameValue) checked="checked" #end
#if ($parameters.disabled == true ) disabled="disabled" #end
#if ($parameters.tabindex) tabindex="$!webwork.htmlEncode($parameters.tabindex)" #end
#if ($parameters.onchange) onchange="$!webwork.htmlEncode($parameters.onchange)" #end
#if ($parameters.id) id="$!webwork.htmlEncode($parameters.id)" #end
/><br />
$!webwork.htmlEncode($parameters.label)
</div>
-
-
-
<div align="center" >
<input type="text"
name="$!webwork.htmlEncode($parameters.name)"
#if ($parameters.size) size="$!webwork.htmlEncode($parameters.size)" #end
#if ($parameters.maxlength) maxlength="$!webwork.htmlEncode($parameters.maxlength)" #end
#if ($parameters.nameValue) value="$!webwork.htmlEncode($parameters.nameValue)" #end
#if ($parameters.disabled == true ) disabled="disabled" #end
#if ($parameters.readonly) readonly="readonly" #end
#if ($parameters.onkeyup) onkeyup="$!webwork.htmlEncode($parameters.onkeyup)" #end
#if ($parameters.tabindex) tabindex="$!webwork.htmlEncode($parameters.tabindex)" #end
#if ($parameters.onchange) onchange="$!webwork.htmlEncode($parameters.onchange)" #end
#if ($parameters.id) id="$!webwork.htmlEncode($parameters.id)" #end
/><br />
$!webwork.htmlEncode($parameters.label)
</div>
-
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1.1 - Example 2</title>
</head>
<body>
<p>Template Change Example:</p>
<p><div align="center" >
<input type="checkbox"
name="checkbox"
value="checkbox_value"
/><br />
A checkbox
</div></p>
<p><div align="center" >
<input type="text"
name="textfield"
/><br />
A text field
</div></p>
</body>
</html>
-
ÊÔÊÔÕâ¸öÀý×Ó!
-
ÓÐʱºòûÓÐÒ»¸öWebWork¸½´øµÄUI×é¼þÄܹ»Âú×ãÄãµÄÒªÇó. Õâʱ, ÍÆ¼öµÄ·½Ê½¾ÍÊÇ´´½¨×Ô¼ºµÄ¶¨ÖÆ×é¼þ. ͨ¹ýÕâÖÖ·½Ê½, ±£³ÖÁËÒ³ÃæÁËÇåÎúÇÒÓë²¼¾ÖºÍ´íÎó¼ì²éÎÊÌâÎÞ¹Ø, ²¢´Ù½øÁË×é¼þ¸´ÓÃ.Òª´´½¨Ò»¸ö¶¨ÖÆ×é¼þ, Ö»ÐèҪΪËü´´½¨Ò»¸öVelocityÄ£°æ, ¾ÍÏñÄÇЩÒÑÓÐ×é¼þÄÇÑù. Ϊ°ÑËüÓÃÔÚÒ³ÃæÉÏ, ʹÓÃ<ww:component /> ±êÇ©²¢ÔÚtemplate ²ÎÊýÖÐÖ¸¶¨Ä£°æ¼´¿É.
Òª´«µÝÄ£°æËùÐèµÄ²ÎÊý, ¿ÉÒÔʹÓÃ<ww:param /> ±êÇ©(²Î¼û4.1 ). ÏÂÃæµÄÀý×ÓÑÝʾÁËÒ»¸ö¶¨ÖƵÄÈÕÆÚ×ֶεĴ´½¨¹ý³Ì.
-
-½øÒ»²½ÔĶÁ: UI±êÇ©
-
-
-
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1.1 - Example 3</title>
</head>
<body>
<p>Custom Component Example:</p>
<p>
<ww:component template="datefield.vm" >
<ww:param name="'label'" value="'Date'" />
<ww:param name="'name'" value="'mydatefield'" />
<ww:param name="'size'" value="3" />
</ww:component>
</p>
</body>
</html>
-
-
-
#set ($name = $parameters.get('name'))
#set ($size = $parameters.get('size'))
#set ($yearSize = $size * 2)
$parameters.get('label'):
<input type="text" name="${name}.day" size="$size" /> /
<input type="text" name="${name}.month" size="$size" /> /
<input type="text" name="${name}.year" size="$yearSize" /> (dd/mm/yyyy)
-
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1.1 - Example 3</title>
</head>
<body>
<p>Custom Component Example:</p>
<p>
Date:
<input type="text" name="mydatefield.day" size="3" /> /
<input type="text" name="mydatefield.month" size="3" /> /
<input type="text" name="mydatefield.year" size="6" /> (dd/mm/yyyy)
</p>
</body>
</html>
-
ÊÔÊÔÕâ¸öÀý×Ó!
ÉÏÒ»¿Î | ÏÂÒ»¿Î
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson04-01.html b/docs/chinese/wikidocs/TutorialLesson04-01.html
deleted file mode 100644
index 18acd085b..000000000
--- a/docs/chinese/wikidocs/TutorialLesson04-01.html
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
- WebWork 2 : TutorialLesson04-01
-
-
-
-
-
-
-
-
-
-
- This page last changed on Oct 04, 2004 by kousuke .
-
-
-
ÔÚʹÓÃJSP»æÖÆÊÓͼʱ, Äã¿ÉÒÔÑ¡ÔñʹÓýű¾(Scriplet)»ò±êÇ©·ÃÎʻ(action)µÄÊý¾Ý. ±êÇ©ÊÇÍÆ¼öʹÓõķ½Ê½.
-
»î¶¯Êý¾Ý¿ÉÒÔͨ¹ý¶ÔÏóÖµÕ»(Value Stack) ½øÐзÃÎÊ. ÏÈÃæµÄÀý×ÓÍê³ÉÁËÓëµÚÈý¿Î µÚ¶þ¸öÀý×Ó(Supplying Data to the Action )ÖеĽá¹ûÒ³ÃæÏàͬµÄ¹¤×÷, µ«Ê¹ÓÃÁ˽ű¾:
-
-
-
<%@ page import ="com.opensymphony.xwork.util.OgnlValueStack" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1 - Lesson 3's example modified</title>
</head>
<body>
<%
OgnlValueStack stack = (OgnlValueStack)request.getAttribute("webwork.valueStack" );
out.write("Hello, " + stack.findValue("person" ));
%>
</body>
</html>
-
ÎÞÂÛÈçºÎ, ÍÆ¼öʹÓÃWebWork±êÇ©¶ø²»Êǽű¾. ÀýÈç, <ww:property /> ±êǩ׼ȷµÄÍê³ÉÁËÉÏÃæ½Å±¾µÄ¹¤×÷, ͬʱ¾ßÓиüÇåÎúµÄÓï·¨²¢´¦ÀíÁ˵±ÖµÕ»²»´æÔÚµÄÇé¿ö.
ÎÒÃÇÒѾÔÚµÚÈý¿Î µÄÀý×ÓÖÐչʾÁËÈçºÎʹÓñêÇ©·ÃÎʻµÄÊôÐÔ. ±¾½Ú½éÉܲ¢¾ÙÀý˵Ã÷WebWork±êÇ©¿âµÄÓÃ;, Ëü·ÖΪÆß´óÀà:
- ͨÓñêÇ© : ×î³£ÓÃ, ×î»ù±¾µÄ±êÇ©;
- ×é¼þ»¯±êÇ© : ¹ÄÀøÊÓͼµÄ×é¼þ»¯;
- Á÷³Ì¿ØÖƱêÇ© : ÔÚJSPÒ³ÃæÖйÜÀí¿ØÖÆÁ÷³Ì;
- µü´ú±êÇ© : µü´úÔªËØ²¢²Ù×÷¿Éµü´ú(iterable)µÄ¶ÔÏó;
- UI±êÇ© : Éú³ÉHTML±íµ¥×ֶκͿؼþ;
- VUI±êÇ© : ÐèÒª×ÔÔ¸ÕßÀ´±àдÕⲿ·Ö ;
- ¹ú¼Ê»¯Ö§³Ö±êÇ© : Ìṩ¹ú¼Ê»¯ÊÓͼ֧³Ö.
-
-
-
-
-
-
-<ww:property /> »ñÈ¡½á¹ûµÄÊôÐÔÖµ. Èç¹ûֵδָ¶¨, ½«·µ»ØÕ»¶¥Öµ.
-
-<ww:push /> ½«Ò»¸öֵѹÈëÖµÕ».
-
-<ww:param /> ÉèÖø¸±êÇ©µÄ²ÎÊý. ½öÓÃÓÚÆäËû±êÇ©ÄÚ²¿, ÓÃÓÚÉèÖø¸±êǩijЩÊôÐÔµÄÖµ.
-
-<ww:set /> ½«ÖµÕ»ÖеÄij¸ö¶ÔÏóµÄÖµÉèÖõ½Ò»¸öscope(page, stack, application, session)ÖÐ. Èç¹ûֵδ¸ø¶¨, ½«Ê¹ÓÃÕ»¶¥Öµ. Èç¹ûscopeδ¸ø¶¨, ʹÓÃ"webwork"µÄȱʡscope.
-
-<ww:url /> ¹¹½¨Ò»¸ö±àÂëµÄURL.
-
-
-
-
- ½øÒ»²½ÔĶÁ: ·ÇUIÀà±êÇ©
-
-
-<ww:action /> ÔÚ±êÇ©¿âµÄÉÏÏÂÎÄ»·¾³ÖÐÖ´ÐÐÒ»¸ö»î¶¯. ±êÇ©µÄÖ÷ÌåÓÃÀ´ÏÔʾ»î¶¯Ö´ÐеĽá¹û.
-
-<ww:bean /> ´´½¨Ò»¸öJavaBean, ³õʼ»¯ËüµÄÊôÐÔ²¢·ÅÈëActionContextÒÔ±ãºóÐøÊ¹ÓÃ.
-
-<ww:include /> °üº¬ÁíÒ»¸öÒ³Ãæ»ò»î¶¯.
-
-
-
-
- ½øÒ»²½ÔĶÁ: ·ÇUIÀà±êÇ©
-
Õâ¸öif-elseµÄ±êÇ©¼¯ºÏ¾ÍÏñif-else½Å±¾Ò»Ñù.
-
-
-
-<ww:if /> ÓÐÌõ¼þÖ´Ðз¾¶. »»ÑÔÖ®, Èç¹û²¼¶ûÌõ¼þÊÇtrueµÄ»°, ¾ÍÔËËã±êÇ©Ö÷ÌåÄÚÈÝ.
-
-<ww:else /> if±êÇ©µÄ·´ÏòÖ´Ðз¾¶. »»ÑÔÖ®, Èç¹ûǰһ¸öif±êÇ©µÄ²¼¶ûÌõ¼þÊÇfalseµÄ»°, ¾ÍÔËËã±êÇ©Ö÷ÌåÄÚÈÝ.
-
-<ww:elseif /> if±êÇ©µÄ·´ÏòÖ´Ðз¾¶. »»ÑÔÖ®, Èç¹ûǰһ¸öif±êÇ©µÄ²¼¶ûÌõ¼þÊÇfalseÇÒ±¾±êÇ©µÄ²¼¶ûÌõ¼þÊÇtrueµÄ»°, ¾ÍÔËËã±êÇ©Ö÷ÌåÄÚÈÝ.
-
-
-
-
-½øÒ»²½ÔĶÁ: ·ÇUIÀà±êÇ©
-
-
-<ww:iterator /> ÔÚÒ»¸ö¼¯ºÏ(collection)Éϵü´ú.
-
-<ww:generator /> Éú³Éµü´úÆ÷(Iterator).
-
-<ww:append /> Ìí¼Ó¼¸¸öµü´úÆ÷.
-
-<ww:subset /> »ñȡһ¸öµü´úÆ÷µÄ×Ó¼¯.
-
-<ww:merge /> ºÏ²¢¼¸¸öµü´úÆ÷.
-
-<ww:sort /> ¶Ôµü´úÆ÷½øÐÐÅÅÐò.
-
-
-
-
- ½øÒ»²½ÔĶÁ: ·ÇUIÀà±êÇ©
-
UI±êÇ©°ü×°ÁËHTML¿Ø¼þÒÔ±ãÓëºËÐÄ¿ò¼Ü½ôÃܼ¯³É. ÕâЩ±êÇ©Éè¼ÆÄ¿±êÊÇ×îС»¯´úÂëÖеÄÂß¼²¿·Ö, ²¢ÓÃÒ»¸öÄ£°æÏµÍ³´úÀí×îÖÕµÄHTML»æÖÆ. UI±êÇ©ÊÔͼ¸²¸Ç×îÆÕ±éµÄÇé¾°(scenario), ²¢ÌṩÁËÒ»¸öcomponent±êÇ©ÒÔ´´½¨¶¨ÖÆ×é¼þ. UI±êÇ©»¹ÄÚ½¨Ö§³ÖÏÔʾÄÚǶµÄ[inline, ²Î¿¼C++ ÖеÄinline¶¨Òå]´íÎóÐÅÏ¢.¶ÔUI±êÇ©µÄһЩϸ½ÚÄÚÈݵÄÃèÊöÈçËüÃÇÈçºÎ¹¤×÷, ÈçºÎÀûÓÃÄ£°æ¶¨ÖÆËüÃǵÄÍâ¹Û, ÈçºÎ´´½¨¶¨ÖÆ×é¼þµÈµÈ, ½«ÔÚÁíÒ»¿ÎÖнéÉÜ.
Ìø×ªµ½WebWorkµÄUI±êÇ©½Ì³Ì .
-
-
-
-<ww:audio /> ???
-
-<ww:prompt /> ???
-
-<ww:filled /> ???
-
-<ww:log /> ???
-
-
-ÐèÒª×ÔÔ¸Õß±àдÕâÒ»²¿·Ö.
-
-
-
-<ww:text /> Êä³öÒ»¸ö¾¹ý¹ú¼Ê»¯´¦ÀíµÄ×Ö·û´®.
-
-<ww:i18n /> ½«¹ú¼Ê»¯×ÊÔ´°ü(resource bundle)·ÅÈëÖµÕ»ÖÐ, Ϊtext±êǩʹÓÃ.
-
-
- ½øÒ»²½ÔĶÁ: UI±êÇ©
ÉÏÒ»¿Î | ÏÂÒ»¿Î
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson04-02.html b/docs/chinese/wikidocs/TutorialLesson04-02.html
deleted file mode 100644
index 0d9e3cf0e..000000000
--- a/docs/chinese/wikidocs/TutorialLesson04-02.html
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
- WebWork 2 : TutorialLesson04-02
-
-
-
-
-
-
-
-
-
-
- This page last changed on Sep 16, 2004 by vitorsouza .
-
-
-
ÓÐÁ½ÖÖ·½·¨¿ÉÒÔÀûÓÃVelocity×÷ΪÊÓͼ.
-
-
- ʹÓÃvelocity ½á¹ûÀàÐÍ»æÖÆvelocityÄ£°æ;
- ÔÚweb.xml ÎļþÖÐ×¢²áWebWorkVelocityServlet ÒÔ±ãÖ±½Óͨ¹ýä¯ÀÀÆ÷ÇëÇó»æÖÆVelocityÄ£°æ.
-
-ΪʹÓõڶþÖÖ·½Ê½, ±ØÐëÐÞ¸Äweb.xml Îļþ¼ÓÈëWebWorkVelocityServlet µÄservlet¶¨Òå¼°ÆäÓ³Éä, ÈçÏÂ:
-
-
-
<servlet>
<servlet-name> velocity</servlet-name>
<servlet-class> com.opensymphony.webwork.views.velocity.WebWorkVelocityServlet</servlet-class>
<load-on-startup> 1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name> velocity</servlet-name>
<url-pattern> *.vm</url-pattern>
</servlet-mapping>
-
-
- ½øÒ»²½ÔĶÁ: xwork.xml ʹÓÃvelocity ½á¹ûÀàÐÍÒâζ×ÅVelocityÄ£°æ½öÄÜͨ¹ý»î¶¯½øÐлæÖÆ, »»ÑÔÖ®, ·ÃÎÊ.vm Ò³Ãæ½«²»»á½øÐлæÖƶøÖ±½Ó·µ»ØÎı¾ÄÚÈÝ. Èç¹ûÄãÑ¡ÔñÕâÖÖ·½Ê½, ÍÆ¼öÄ㽫VelocityÎļþ·ÅÔÚWEB-INF Ŀ¼ÏÂʹÆä²»¿É·ÃÎÊ.
ʹÓÃWebWorkVelocityServlet Òâζ×ÅVelocityÄ£°æ¿ÉÒÔͨ¹ý¶Ô.vm Ò³ÃæµÄÇëÇó½øÐлæÖÆ. ÕâÒ²Òâζ×ÅÐèÒª¶ÔÄ£°æÊµÏÖ°²È«¼ì²é, ÒÔ±ãÓû§²»ÄÜÈÆ¹ý»î¶¯(Èç¹ûÕâÊDZØÐèµÄ)Ö±½Ó·ÃÎÊËü. ²»¹ÜÄãÑ¡ÔñÄÄÖÖ·½Ê½(ÄãÒ²¿ÉÒÔÑ¡ÔñͬʱʹÓÃÁ½ÖÖ·½Ê½), µ±Äã±àдģ°æÊ±²»½ö¿ÉÒÔʹÓÃÈ«²¿VelocityµÄÌØÐÔ, »¹¿ÉÒÔʹÓÃWebWorkÌṩµÄÆäËû¹¦ÄÜ. ÕâÀï¼ÙÉèÄãÒѾÊìϤÁËVelocity, Òò´ËÎÒÃǽö¹Ø×¢WebWorkÌṩµÄÌØÐÔ. Èç¹ûÄã²»ÊìϤ, ÇåÔÚ¼ÌÐøÔĶÁ֮ǰ²ÎÔÄ'¿ªÊ¼VelocityÖ®Âà '.
Ö÷ÒªÌØÐÔÊÇÌṩÁ˶ÔÖµÕ»ÖжÔÏó·½±ãµÄ·ÃÎÊ;¾¶, ÕâÀï°üº¬ÁËWebWork×Ô¶¯ÌṩµÄһЩÄÚÈÝ, ÒòΪÄãÔÚijЩµØ·½»á·¢ÏÖËüµÄ¼ÛÖµ. ÕâÊÇÖµÕ»Öаüº¬µÄ²¿·Ö¶ÔÏó:
-
-
- µ±Ç°µÄHttpServletRequest ;
- µ±Ç°µÄHttpServletResponse ;
- µ±Ç°µÄOgnlValueStack ;
- Ò»¸öOgnlTool µÄʵÀý;
-µ±Ç°»î¶¯ÀàµÄÈ«²¿ÊôÐÔ.
-
-Òª·ÃÎÊÖµÕ»ÖеÄÊý¾Ý, ÄãÖ»ÐëʹÓÃÊʵ±µÄVelocityÒýÓÃ:
-
-
- $req = HttpServletRequest ;
- $res = HttpServletResponse ;
- $stack = OgnlValueStack ;
- $ognl = OgnlTool ;
- $name-of-property = property of the current action class.
-
-ÏÂÃæµÄÀý×ÓÍê³ÉÁËÓëµÚÈý¿Î ÏàͬµÄ¹¦ÄÜ, µ«ÊÇÏÖÔÚʹÓÃVelocityÄ£°æ×öΪ½á¹û. ÐèҪעÒâµÄÊÇ<property value="person" /> ±êÇ©±»Ìæ»»³É$person ÒýÓÃ, Ëü·µ»ØÍ¬ÑùµÄÄÚÈÝ: »î¶¯ÀàµÄÒ»¸öÊôÐÔ. ±¾ÀýÖÐÎÒÃÇʹÓÃÁËvelocity ½á¹ûÀàÐÍ ·½Ê½.
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<default-interceptor-ref name="defaultStack" />
<action name="helloVelocity" class="lesson03.HelloAction" >
<result name="error" type="dispatcher" > ex01-index.jsp</result>
<result name="success" type="velocity" > ex01-success.vm</result>
</action>
</package>
</xwork>
-
-
-
package lesson03;
import com.opensymphony.xwork.ActionSupport;
public class HelloAction extends ActionSupport {
String person;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this .person = person;
}
public String execute() throws Exception {
if ((person == null ) || (person.length() == 0)) return ERROR;
else return SUCCESS;
}
}
-
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 3 - Example 2</title>
</head>
<body>
<p>What's your name?</p>
<form action="hello.action" method="post" >
<p><input type="text" name="person" /><input type="submit" /></p>
</form>
</body>
</html>
-
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 4.2 - Example 1</title>
</head>
<body>
Hello, $person
</body>
</html>
-
-
- ÊÔÊÔÕâ¸öÀý×Ó!
-
ÈçÄãËùÖª, ´ÓJSPת»»µ½VelocityʱʧȥÁËʹÓÃJSP±êÇ©µÄÄÜÁ¦. µ«WebWorkµÄVelocityServletÌṩһ¸ö·½·¨: ʹÓÃ#tag , #bodytag ºÍ#param Velocityºê¶¨Òå(velocimacros). Óï·¨ÈçÏÂ:
-
-
-
#tag (name-of-tag list-of-attributes)
-
– »ò –
-
#bodytag (name-of-tag list-of-attributes)
#param (key value)
#param (key value)
...
#end
-
ÈÃÎÒÃǻعË4.1.1 µÄ±íµ¥Ê¾ÀýÀ´ÑÝʾÔÚvelocityÖÐʹÓÃUI±êÇ©µÄÓ÷¨:
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<default-interceptor-ref name="defaultStack" />
<action name="formProcessingVelocityIndex" class="lesson04_02.FormProcessingIndexAction" >
<result name="success" type="velocity" > ex02-index.vm</result>
</action>
<action name="formProcessingVelocity" class="lesson04_01_01.FormProcessingAction" >
<result name="input" type="velocity" > ex02-index.vm</result>
<result name="success" type="velocity" > ex02-success.vm</result>
<interceptor-ref name="validationWorkflowStack" />
</action>
</package>
</xwork>
-
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 4.2 - Example 2</title>
<style type="text/css" >
.errorMessage { color: red; }
</style>
</head>
<body>
<p>UI Form Tags Example using Velocity:</p>
#bodytag (Form "action='formProcessingVelocity.action'" "method='post'" )
#tag (Checkbox "name='checkbox'" "label='A checkbox'" "fieldValue='checkbox_value'" )
#tag (File "name='file'" "label='A file field'" )
#tag (Hidden "name='hidden'" "value='hidden_value'" )
#tag (Label "label='A label'" )
#tag (Password "name='password'" "label='A password field'" )
#tag (Radio "name='radio'" "label='Radio buttons'" "list={'One', 'Two', 'Three'}" )
#tag (Select "name='select'" "label='A select list'" "list={'One', 'Two', 'Three'}"
"emptyOption=true " )
#tag (Textarea "name='textarea'" "label='A text area'" "rows='3'" "cols='40'" )
#tag (TextField "name='textfield'" "label='A text field'" )
#tag (Submit "value='Send Form'" )
#end
</body>
</html>
-
-
-
<html>
<head>
<title>WebWork Tutorial Lesson 4.2 - Example 2</title>
</head>
<body>
<p>UI Form Tags Example result using Velocity:</p>
<ul>
<li>checkbox: $!checkbox</li>
<li>file: $!file</li>
<li>hidden: $!hidden</li>
<li>password: $!password</li>
<li>radio: $!radio</li>
<li>select: $!select</li>
<li>textarea: $!textarea</li>
<li>textfield: $!textfield</li>
</ul>
</body>
</html>
-
-
-
package lesson04_01_01;
import com.opensymphony.xwork.ActionSupport;
public class FormProcessingAction extends ActionSupport {
private String checkbox;
private String file;
private String hidden;
private String password;
private String radio;
private String select;
private String textarea;
private String textfield;
public String getCheckbox() { return checkbox; }
public String getFile() { return file; }
public String getHidden() { return hidden; }
public String getPassword() { return password; }
public String getRadio() { return radio; }
public String getSelect() { return select; }
public String getTextarea() { return textarea; }
public String getTextfield() { return textfield; }
public void setCheckbox(String checkbox) { this .checkbox = checkbox; }
public void setFile(String file) { this .file = file; }
public void setHidden(String hidden) { this .hidden = hidden; }
public void setPassword(String password) { this .password = password; }
public void setRadio(String radio) { this .radio = radio; }
public void setSelect(String select) { this .select = select; }
public void setTextarea(String textarea) { this .textarea = textarea; }
public void setTextfield(String textfield) { this .textfield = textfield; }
public String execute() throws Exception {
return SUCCESS;
}
}
-
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="checkbox" >
<field-validator type="requiredstring" >
<message> Please, check the checkbox.</message>
</field-validator>
</field>
<field name="file" >
<field-validator type="requiredstring" >
<message> Please select a file.</message>
</field-validator>
</field>
<field name="password" >
<field-validator type="requiredstring" >
<message> Please type something in the password field.</message>
</field-validator>
</field>
<field name="radio" >
<field-validator type="requiredstring" >
<message> Please select a radio button.</message>
</field-validator>
</field>
<field name="select" >
<field-validator type="requiredstring" >
<message> Please select an option from the list.</message>
</field-validator>
</field>
<field name="textarea" >
<field-validator type="requiredstring" >
<message> Please type something in the text area.</message>
</field-validator>
</field>
<field name="textfield" >
<field-validator type="requiredstring" >
<message> Please type something in the text field.</message>
</field-validator>
</field>
</validators>
-
-
- ÊÔÊÔÕâ¸öÀý×Ó! —
ÉÏÃæµÄÀý×ÓûÓÐʹÓÃ#param ±êÇ©. Òò´Ë, ÈÃÎÒÃǻعË4.1.1 ÖеÄÁíÒ»¸öÀý×Ó - ¶¨ÖÆ×é¼þ:
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 4.2 - Example 3</title>
</head>
<body>
<p>Custom Component Example:</p>
<p>
#bodytag (Component "template=datefield.vm" )
#param ("label" "Date" )
#param ("name" "mydatefield" )
#param ("size" "3" )
#end
</p>
</body>
</html>
-
-
-
#set ($name = $parameters.get('name'))
#set ($size = $parameters.get('size'))
#set ($yearSize = $size * 2)
$parameters.get('label'):
<input type="text" name="${name}.day" size="$size" /> /
<input type="text" name="${name}.month" size="$size" /> /
<input type="text" name="${name}.year" size="$yearSize" /> (dd/mm/yyyy)
-
×¢Òâ, Õâ´ÎÎÒÃÇûÓÐÏñʹÓÃJSP±êÇ©ÄÇÑù½«Date ºÍmydatefield Óõ¥ÒýºÅ¿òÆðÀ´.
ÊÔÊÔÕâ¸öÀý×Ó!
ÉÏÒ»¿Î | ÏÂÒ»¿Î
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson04-03.html b/docs/chinese/wikidocs/TutorialLesson04-03.html
deleted file mode 100644
index a99633f79..000000000
--- a/docs/chinese/wikidocs/TutorialLesson04-03.html
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
- WebWork 2 : TutorialLesson04-03
-
-
-
-
-
-
-
-
-
-
- This page last changed on Sep 16, 2004 by vitorsouza .
-
-
-
Freemarker is a powerfull template engine that competes with Velocity. You can learn more about it in the project's homepage: http://freemarker.sourceforge.net .First of all, to use Freemarker with Webwork, you have to place the freemarker.jar in your WEB-INF\lib folder. You can download the distribution here .
After that, just configure web.xml and start writing your templates, as explained below.
-
To use Freemarker as the view, you need to modify web.xml and add a servlet and a servlet mapping for FreemarkerServlet , as demonstrated below:
-
-
-
<servlet>
<servlet-name> freemarker</servlet-name>
<servlet-class> com.opensymphony.webwork.views.freemarker.FreemarkerServlet</servlet-class>
<init-param>
<param-name> TemplatePath</param-name>
<param-value> /</param-value>
</init-param>
<init-param>
<param-name> NoCache</param-name>
<param-value> true</param-value>
</init-param>
<init-param>
<param-name> ContentType</param-name>
<param-value> text/html</param-value>
</init-param>
<init-param>
<param-name> default_encoding</param-name>
<param-value> ISO-8859-1</param-value>
</init-param>
<init-param>
<param-name> number_format</param-name>
<param-value> 0.##########</param-value>
</init-param>
<load-on-startup> 1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name> freemarker</servlet-name>
<url-pattern> *.ftl</url-pattern>
</servlet-mapping>
-
The configuration above means that Freemarker templates can be rendered through requests to .ftl pages. That also means that you should implement security checks in your templates so an user doesn't access it directly without going through an action first (if that is required). But you can always place your Freemarker files under WEB-INF so they become unaccessible to direct requests. We will use the latter approach in our examples.
Inside a Freemarker template, you will have access to every object managed by WebWork with the following syntax:
-
-
- $stack = OgnlValueStack ;
- $webwork = FreemarkerWebWorkUtil , a toolbox providing services like formatting url, accessing the value stack, etc;
- $name-of-property = property retrieved from the value stack. If that fails, it looks up an attribute with that name in the HttpServletRequest , HttpSession and ServletContext , in that order;
- $Request = HttpServletRequest ;
- $Session = HttpServletResponse ;
- $Application = OgnlValueStack .
-
-The example below does the same thing as example 2 from lesson 3 , but now, using Freemarker templates.
-
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<default-interceptor-ref name="defaultStack" />
<action name="indexFreemarker" class="com.opensymphony.xwork.ActionSupport" >
<result name="success" type="dispatcher" > /WEB-INF/ftl/lesson3/index.ftl</result>
</action>
<action name="helloFreemarker" class="lesson03.HelloAction" >
<result name="error" type="dispatcher" > /WEB-INF/ftl/lesson3/index.ftl</result>
<result name="success" type="dispatcher" > /WEB-INF/ftl/lesson3/success.ftl</result>
</action>
</package>
</xwork>
-
-
-
package lesson03;
import com.opensymphony.xwork.ActionSupport;
public class HelloAction extends ActionSupport {
String person;
public String getPerson() {
return person;
}
public void setPerson(String person) {
this .person = person;
}
public String execute() throws Exception {
if ((person == null ) || (person.length() == 0)) return ERROR;
else return SUCCESS;
}
}
-
-
-
-
<#assign ww=JspTaglibs["/WEB-INF/lib/webwork.tld" ] />
<html>
<head>
<title>WebWork Tutorial - Lesson 4.3 - Example 1</title>
</head>
<body>
<p>Click <a href="${wwUtil.buildUrl('indexFreemarker.action')}" >here</a> to reload this page.</p>
<@ww.form name="'nameForm'" action="'helloFreemarker.action'" method="'POST'" >
<@ww.textfield label="'What is your name ?'" name="'person'" value="person" size="20" />
<@ww.submit name="'submit'" value="'Submit'" />
</@ww.form>
</body>
</html>
-
If you don't want to use WebWork's UI Tags, you could do it like this:
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 4.3 - Example 1</title>
</head>
<body>
<p>Click <a href="${wwUtil.buildUrl('indexFreemarker.action')}" >here</a> to reload this page.</p>
<form name="nameForm" action="${wwUtil.buildUrl('helloFreemarker.action')}" method="POST" >
What is your name ?
<input type="text" name="person" value="${person}" size="20" >
<input type="submit" name="submit" value="Submit" >
</form>
</body>
</html>
-
However, if you choose no to use tags, it's recommended that you use Freemarker Macros to write the form elements.
-
-
-
<#assign ww=JspTaglibs["/WEB-INF/lib/webwork.tld" ] />
<html>
<head>
<title>WebWork Tutorial - Lesson 4.3 - Example 1</title>
</head>
<body>
Come from the property WW tag (taglibs support) : <@ww.property value="person" /> <br>
Come from the Freemarker lookup in the WW stack : ${person}
</body>
</html>
-
You can use either WebWork property tag or the Freemarker $person reference. Both of them return the same thing: a property from the action class.
Previous Lesson | Next Lesson
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson04.html b/docs/chinese/wikidocs/TutorialLesson04.html
deleted file mode 100644
index ee4d72200..000000000
--- a/docs/chinese/wikidocs/TutorialLesson04.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
- WebWork 2 : TutorialLesson04
-
-
-
-
-
-
-
-
-
-
- This page last changed on May 31, 2004 by vitorsouza .
-
-
-
Äã¿ÉÒÔ½«¶àÖÖ²»Í¬µÄ¼¼Êõ×÷ΪÊÓͼ, Ò²¾ÍÊÇ´´½¨Óû§½çÃæ:
-
JSPÊÇͨ³£µÄÑ¡Ôñ, ÒòΪ´ó²¿·ÖJava¿ª·¢ÕßÒѾÊìϤÕâÒ»¼¼Êõ. ±¾½Ú¼Ù¶¨ÄãÒѾ¾ß±¸JSP¿ª·¢¾Ñé, ÑÝʾÈçºÎʹÓÃWebWorkµÄÌØÐÔ, Ö÷ÒªÊÇʹÓÃWebWork±êÇ©.Ìø×ªµ½ 4.1
VelocityÊÇÒ»¸ö»ùÓÚJavaµÄÄ£°æÒýÇæ, ÌṩÁËÒ»¸ö¼òµ¥È´Ç¿´óµÄÄ£°æÓïÑÔÓÃÒÔÌæ´úJSP²¢ÔÊÐí·ÖÀë¹Ø×¢µã. ±¾½Ú¼Ù¶¨ÄãÒѾÊìϤÁËVelocity, ²¢½éÉÜÈçºÎÓ¦ÓÃWebWorkÌØÐÔ.
Ìõתµ½4.2
-
FreemarkerÊÇΪMVCģʽÉè¼ÆµÄÁíÒ»¸ö»ùÓÚJavaµÄÄ£°æÒýÇæÌṩÁËÇ¿´óµÄÄ£°æÓïÑÔÓÃÒÔ´úÌæJSP, µ«¿ÉÒÔͨ¹ý¶ÔJSP±êÇ©¿âµÄÖ§³Ö±£ÁôÓëJSPµÄ¼æÈÝ. ±¾½Ú½éÉÜÈçºÎ½«WebWorkºÍFreemarker½áºÏʹÓÃ.Ìø×ªµ½4.3
ÉÏÒ»¿Î | ÏÂÒ»¿Î
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/TutorialLesson05.html b/docs/chinese/wikidocs/TutorialLesson05.html
deleted file mode 100644
index 9bf0a5b00..000000000
--- a/docs/chinese/wikidocs/TutorialLesson05.html
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
- WebWork 2 : TutorialLesson05
-
-
-
-
-
-
-
-
-
-
- This page last changed on Sep 16, 2004 by vitorsouza .
-
-
-
½ØÈ¡Æ÷¿ÉÒÔ½«ÈÎÒâ´úÂë°üº¬ÔÚµ÷ÓÃÕ»ÖлִÐÐǰ»òÖ®ºó, Ëü¿ÉÒÔ¼«´óµÄ¼ò»¯´úÂëͬʱÌṩÔöÇ¿´úÂ븴ÓÃÄÜÁ¦. XWorkºÍWebWorkµÄÐí¶àÌØÐÔ¶à×÷Ϊ½ØÈ¡Æ÷ʵÏÖ, ¿ÉÒÔºÍÄã×Ô¼ºµÄÀ¹½ØÆ÷Ò»Æðͨ¹ýÍⲿÅäÖÃÈÎÒâÖ¸¶¨Ë³Ðò²¢ÅäÖÃÔÚÈÎÒâ»î¶¯ÉÏ.»»ÑÔÖ®, µ±Äã·ÃÎÊÒ»¸ö*.action µÄµØÖ·, WebWorkµÄ class="monospaced">ServletDispatcherÖ´ÐÐÒ»¸ö»î¶¯µ÷ÓÃ. ÔڻִÐÐǰ, ÕâÒ»µ÷ÓÿÉÒÔ±»ÁíÒ»¸ö¶ÔÏó½ØÈ¡, Õâ¸ö¶ÔÏó¾Í³ÆÎª½ØÈ¡Æ÷. ÒªÏëÔÚÒ»¸ö»î¶¯Ö´ÐÐ֮ǰ(»òÖ®ºó)ÉèÖÃÒ»¸ö½ØÈ¡Æ÷, Ö»ÐèÕýÈ·ÅäÖÃxwork.xml , ÈçÏÂÀýËùʾ, ½èÓÃ×Ô4.1.1 :
-
-
<action name="formProcessing" class="lesson04_01_01.FormProcessingAction" >
<result name="input" type="dispatcher" > ex01-index.jsp</result>
<result name="success" type="dispatcher" > ex01-success.jsp</result>
<interceptor-ref name="validationWorkflowStack" />
</action>
-
ÈçÄãËù¼û, 4.1.1ÖеĻformProcessing ʹÓÃÁËvalidationWorkflowStack . ËüÊÇÒ»¸ö½ØÈ¡Æ÷Õ», Õ»Öа´ÕÕ½ØÈ¡Æ÷µÄÖ´ÐÐ˳Ðò½øÐÐ×éÖ¯. Õâ¸ö½ØÈ¡Æ÷Õ»¶¨ÒåÔÚwebwork-default.xml , ÕâÑùÎÒÃÇÐèÒª×öµÄ¾ÍÊÇÔڻÅäÖõÄ<interceptor-ref /> »ò°üÅäÖÃÖеÄ<default-interceptor-ref /> ÖÐÉùÃ÷, ¾ÍÏñµÚÈý¿Î µÄµÚÒ»¸öÀýÒ»Ñù:
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<default-interceptor-ref name="defaultStack" />
<action name="helloWebWorld" class="lesson03.HelloWebWorldAction" >
<result name="success" type="dispatcher" > ex01-success.jsp</result>
</action>
</package>
</xwork>
-
ÈÃÎÒÃÇÏÈ¿´¿´ËüÊÇÈçºÎ¹¤×÷µÄ:
- ´´½¨Ò»¸ö½ØÈ¡Æ÷Àà, ËüʵÏÖÁËcom.opensymphony.xwork.interceptor.Interceptor ½Ó¿Ú (°üº¬ÔÚxwork-1.0.jar ÖÐ);
- ÔÚXMLÅäÖÃÎļþ(xwork.xml )ÖÐʹÓÃǶÌ×ÔÚ<interceptors /> ÖеÄÔªËØ<interceptor /> ÉùÃ÷¸ÃÀà;
- ʹÓÃ<interceptor-stack /> ÔªËØ(¿ÉÑ¡µÄ )´´½¨½ØÈ¡Æ÷Õ»;
- ʹÓÃ<interceptor-ref /> »ò<default-interceptor-ref /> ¾ö¶¨»î¶¯Ê¹ÓÃÄÇЩ½ØÈ¡Æ÷. Õâ¸öÑù°å¶¨ÒåÁ˸ýØÈ¡Æ÷±»ÓÃÓÚÒ»¸öÖ¸¶¨µÄ»î¶¯, ¶øÖ®ºóÖ¸¶¨È±Ê¡½ØÈ¡Æ÷Õ»ÓÃÓÚÄÇЩûÓÐÖ¸¶¨<interceptor-ref /> µÄ»î¶¯.
-
-ÉîÈë¹Û²ìwebwork-default.xml ÎÒÃÇ¿ÉÒÔ·¢ÏÖÕâÊÇÔõÑù×öµ½µÄ:
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<package name="webwork-default" >
<result-types>
<result-type name="dispatcher" default="true"
class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" />
<result-type name="redirect"
class="com.opensymphony.webwork.dispatcher.ServletRedirectResult" />
<result-type name="velocity"
class="com.opensymphony.webwork.dispatcher.VelocityResult" />
<result-type name="chain"
class="com.opensymphony.xwork.ActionChainResult" />
<result-type name="xslt"
class="com.opensymphony.webwork.views.xslt.XSLTResult" />
</result-types>
<interceptors>
<interceptor name="timer"
class="com.opensymphony.xwork.interceptor.TimerInterceptor" />
<interceptor name="logger"
class="com.opensymphony.xwork.interceptor.LoggingInterceptor" />
<interceptor name="chain"
class="com.opensymphony.xwork.interceptor.ChainingInterceptor" />
<interceptor name="static-params"
class="com.opensymphony.xwork.interceptor.StaticParametersInterceptor" />
<interceptor name="params"
class="com.opensymphony.xwork.interceptor.ParametersInterceptor" />
<interceptor name="model-driven"
class="com.opensymphony.xwork.interceptor.ModelDrivenInterceptor" />
<interceptor name="component"
class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor" />
<interceptor name="token"
class="com.opensymphony.webwork.interceptor.TokenInterceptor" />
<interceptor name="token-session"
class="com.opensymphony.webwork.interceptor.TokenSessionStoreInterceptor" />
<interceptor name="validation"
class="com.opensymphony.xwork.validator.ValidationInterceptor" />
<interceptor name="workflow"
class="com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor" />
<interceptor name="servlet-config"
class="com.opensymphony.webwork.interceptor.ServletConfigInterceptor" />
<interceptor name="prepare"
class="com.opensymphony.xwork.interceptor.PrepareInterceptor" />
<interceptor name="conversionError"
class="com.opensymphony.webwork.interceptor.WebWorkConversionErrorInterceptor" />
<interceptor-stack name="defaultStack" >
<interceptor-ref name="static-params" />
<interceptor-ref name="params" />
<interceptor-ref name="conversionError" />
</interceptor-stack>
<interceptor-stack name="validationWorkflowStack" >
<interceptor-ref name="defaultStack" />
<interceptor-ref name="validation" />
<interceptor-ref name="workflow" />
</interceptor-stack>
</interceptors>
</package>
</xwork>
-
ÓÉÓÚÔÚxwork.xml Öаüº¬ÁËwebwork-default.xml , ÉÏÊöÈ«²¿½ØÈ¡Æ÷ºÍÕ½¶·¿ÉÒÔÓÃÓÚÎÒÃǵĻ. ÏÂÃæÁгöÕâЩ½ØÈ¡Æ÷µÄ¹¦ÄÜ:
-
-
- timer : ¶Ô»î¶¯(°üº¬Ç¶Ì׵ĽØÈ¡Æ÷ºÍÊÓͼ)Ö´ÐнøÐмÆÊ±;
- logger : ¼Í¼½«ÒªÖ´ÐеĻ;
- chain : ʹµÃǰһ¸ö»î¶¯µÄÊôÐÔÔÚµ±Ç°»î¶¯ÖпÉÓÃ. ÓÃÓÚʵÏֻÁ´(action chaining) (²ÎÔÄ: ½á¹ûÀàÐÍ );
- static-params : ½«xwork.xml Öж¨ÒåµÄ²ÎÊýÉèÖõ½»î¶¯ÖÐ. Ï൱ÓÚ°üº¬ÔÚ<action /> ±êÇ©ÖеÄ<param /> ±êÇ©;
- params : ½«ÇëÇó(POSTºÍGET)µÄ²ÎÊýÉèÖõ½»î¶¯ÀàÖÐ. ÔÚµÚÈý¿ÎÖÐÓÐÕâÑùµÄÀý×Ó ;
- model-driven : Èç¹û»î¶¯ÊµÏÖModelDriven , ½«getModel() µÄ½á¹ûѹÈëÖµÕ»;
- component : ¼¤»î×¢²áµÄ×é¼þ²¢ÔÊÐí»î¶¯Ê¹ÓÃ. (²Î¼û: [IoCÓë×é¼þ] );
- token : ÔڻÖмì²éºÏ·¨ÁîÅÆ(token), ·ÀÖ¹±íµ¥µÄÖØ¸´Ìá½»;
- token-session : ͬÉÏ, µ«ÊÇÔÚ½Óµ½·Ç·¨ÁîÅÆÊ±½«Ìá½»µÄÊý¾Ý±£´æÔÚsessionÖÐ;
- validation : ʹÓö¨ÒåÔÚ{Action}-validation.xml ÖеÄУÑéÆ÷½øÐÐУÑé(²Î¼û: УÑé ). ÔÚ4.1.1 ÖÐÓÐÕâÑùµÄÀý×Ó;
- workflow : µ÷ÓûÀàÖеÄvalidate·½·¨. Èç¹û»î¶¯²úÉúÁË´íÎ󽫷µ»Øµ½ÊäÈë ÊÓͼ. Ó¦µ±ÓëУÑé½ØÈ¡Æ÷Ò»ÆðʹÓÃ(²Î¼û: УÑé );
- servlet-config : Ìṩ·ÃÎÊHttpServletRequest ºÍHttpServletResponse µÄ;¾¶(ʹÓÃǰÇëÈý˼, ÒòΪËüʹÄãµÄ´úÂëÓëServlet½Ó¿Ú°ó¶¨ÔÚÒ»Æð);
- prepare : ÔÊÐíÔÚ²ÎÊýÉèÖÃ֮ǰͨ¹ý´úÂë·ÃÎʻ.;
- conversionError : ´Ë´¦ÐèÒª°ïÖú .
-
Èç¹ûÉÏÊö½ØÈ¡Æ÷¶¼²»·ûºÏÄãµÄÌØÊâÐèÒª, ÄãÐèҪʵÏÖ×Ô¼ºµÄ½ØÈ¡Æ÷. ÐÒÔ˵ÄÊÇ, ÕâÊÇÒ»¸ö·Ç³£ÈÝÒ×Íê³ÉµÄÈÎÎñ. ¼Ù¶¨ÎÒÃÇÐèÒªÒ»¸ö½ØÈ¡Æ÷¸ù¾Ý²»Í¬µÄʱ¶Î(Ô糿, ÏÂÎç»òÍíÉÏ)ÔÚsessionÖзÅÈë¶ÔÓ¦µÄÎʺòÓï. ÏÂÎÄչʾÁËÈçºÎʵÏÖËü:
-
-
package lesson05;
import java.util.Calendar;
import com.opensymphony.xwork.interceptor.Interceptor;
import com.opensymphony.xwork.ActionInvocation;
public class GreetingInterceptor implements Interceptor {
public void init() { }
public void destroy() { }
public String intercept(ActionInvocation invocation) throws Exception {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
String greeting = (hour < 6) ? "Good evening" :
((hour < 12) ? "Good morning" :
((hour < 18) ? "Good afternoon" : "Good evening" ));
invocation.getInvocationContext().getSession().put("greeting" , greeting);
String result = invocation.invoke();
return result;
}
}
-
-
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default" >
<interceptors>
<interceptor name="greeting" class="section02.lesson05.GreetingInterceptor" />
</interceptors>
<action name="greetingAction" class="lesson05.GreetingAction" >
<result name="success" type="velocity" > ex01-result.vm</result>
<interceptor-ref name="greeting" />
</action>
</package>
</xwork>
-
-
-
package lesson05;
import com.opensymphony.xwork.ActionSupport;
public class GreetingAction extends ActionSupport {
public String execute() throws Exception {
return SUCCESS;
}
}
-
-
-
<html>
<head>
<title>WebWork Tutorial - Lesson 5 - Example 1</title>
</head>
<body>
#set ($ses = $req.getSession())
<p><b>${ses.getAttribute('greeting')}!</b></p>
</body>
</html>
-
ÏÈÀ´¿´Ò»Ï½ØÈ¡Æ÷Àà. ºÍ֮ǰ½éÉܵÄÒ»Ñù, ½ØÈ¡Æ÷±ØÐëʵÏÖcom.opensymphony.xwork.interceptor.Interceptor µÄ·½·¨: init() , ½«ÔÚ³õʼ»¯Ê±±»µ÷ÓÃ, destroy() , ÔÚÏú»Ùʱ±»µ÷ÓÃ, ×îÎªÖØÒª, intercept(ActionInvocation invocation) , ¸Ã·½·¨ÊǼÓÈ빤×÷´úÂëµÄµØ·½.
×¢Òâ, ÎÒÃǵĽØÈ¡Æ÷·µ»Øinvocation.invoke() µÄ½á¹û, ¸Ã·½·¨½«Ö´ÐÐÕ»ÖÐÏÂÒ»¸ö½ØÈ¡Æ÷, Èç¹û±¾½ØÈ¡Æ÷ÊÇÕ»ÖеÄ×îºóÒ»¸ö, ½«Ö´Ðл. ÕâÒâζ׎ØÈ¡Æ÷ÓжÌ·(short-circuiting)»î¶¯µ÷ÓõÄÄÜÁ¦, ¿ÉÒÔ¸ù±¾²»Ö´Ðлֱ½Ó·µ»ØÒ»¸öString½á¹û! ÕâÖÖÓ÷¨ÐèÒª½÷É÷ʹÓÃ.½ØÈ¡Æ÷µÄÁíÒ»¸ö¹¦ÄÜÊÇÔڻִÐкóÖ´ÐдúÂë. Ϊ´Ë, Ö»Ð轫´úÂë·ÅÔÚinvocation.invoke()µ÷ÓÃÖ®ºó. WebWorkÌṩһ¸öÒѾʵÏÖÏÂÁÐÐÐΪµÄ³éÏóÀà: com.opensymphony.xwork.interceptor.AroundInterceptor . Ö»Ðë¼Ì³Ð(extend)¸ÃÀಢʵÏÖ·½·¨before(ActionInvocation invocation) ºÍafter(ActionInvocation dispatcher, String result) .
xwork.xml ÖйØÓڻÀàºÍ½á¹ûÒ³ÃæµÄÅäÖÃÄÚÈݼò½àÃ÷Á˲»ÐèÒª½øÒ»²½½âÊÍ.
-
- ÊÔÊÔÕâ¸öÀý×Ó!
-
ÉÏÒ»¿Î | Ö¸ÄϽáÊø
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Type Conversion.html b/docs/chinese/wikidocs/Type Conversion.html
deleted file mode 100644
index 30e5029ef..000000000
--- a/docs/chinese/wikidocs/Type Conversion.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
- WebWork 2 : ÀàÐÍת»»
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 14, 2004 by plightbo .
-
-
- ¸ÐлXWorkÈÃWebWorkÓµÓзdz£ÏȽøµÄÀàÐÍת»»ÄÜÁ¦. ¸ü¶àÄÚÈݲμûType Conversion .
µ±ÄãÐèÒª½«Ò»¸ö×Ö·û´®×ª»»³ÉΪһ¸ö¸üΪ¸´ÔӵĶÔÏóʱ, ÀàÐÍת»»ÄÜ·¢»ÓÇ¿´óµÄ×÷ÓÃ. ÓÉÓÚWebÊÇÀàÐͲ»¿ÉÖªµÄ(type-agnostic)(HTTPÖÐÈκÎÀàÐͶ¼ÊÇ×Ö·û´®), Òò´ËWebWorkµÄÀàÐÍת»»¹¦Äܷdz£ÓÐÓÃ. ÀýÈç, Èç¹ûÄãÌáʾÓû§Ê¹ÓÃ×Ö·û´®¸ñʽ("3, 22")ÊäÈëÒ»¸ö×ø±ê, ÄãÐèÒªÈÃWebWorkÍê³ÉStringµ½PointºÍPointµ½StringµÄת»».
ʹÓÃ"point"µÄÀý×Ó, Èç¹û»î¶¯(»òÕ߯äËûÐèÒªÉèÖÃÊôÐÔµÄ×éºÏ¶ÔÏó)ÓÐÒ»¸ö¶ÔÓ¦µÄclassName-conversion.propertiesÎļþ, WebWork»áʹÓÃÅäÖõÄÀàÐÍת»»Æ÷½øÐиÃÀàºÍ×Ö·û´®µÄת»». Òò´Ë½«"3, 22"ת»»³Énew Point(3, 22)Ö»ÐèÔÚClassName-conversion.propertiesÖмÓÈëÏÂÁÐÄÚÈÝ:
-
point = com.acme.PointConverter
# ×¢Òâ: PointerConverter±ØÐèʵÏÖognl.TypeConverter
# »ò¼Ì³Ðognl.DefaultTypeConverter
-
Äã±àдµÄÀàÐÍת»»Æ÷±ØÐë¼ì²é±»ÓÃÓÚת»»ÄÄÖÖÀàÐÍ. ÓÉÓÚÈ«²¿ÊÇÓëString½øÐÐÏ໥ת»», ÐèÒª½«×ª»»·½·¨·ÖΪÁ½²¿·Ö: Ò»¸ö½«Stringת»»ÎªPoint, ÁíÒ»¸ö½«Pointת»»ÎªString.
ÕâЩÍê³Éºó, Äã¿ÉÒÔÒýÓÃpoint¶ÔÏó(<ww:property value="point"/>)²¢ÇÒËü½«Êä³öΪ"3, 22". ͬÑùµÄ, Èç¹ûÄ㽫ËüÌá½»µ½»î¶¯, Ëü½«ÔÙ´Îת»»³ÉPoint.×¢Òâ: ÀàÐÍת»»²»ÄÜ×÷Ϊi18nµÄÌæ´úÆ·. ²»ÍƼöʹÓÃÕâÒ»ÌØÐÔÊä³öÏàÓ¦µÄÈÕÆÚ¸ñʽ. Ïà·´, ÄãÓ¦¸ÃʹÓÃWebWorkµÄi18n¹¦ÄÜ(²¢ÇÒÑо¿Ò»ÏÂJDKÖÐMessageFormatµÄJavaDoc)À´Á˽âÈçºÎʹÓÃÏàÓ¦ÕýÈ·µÄÈÕÆÚ¸ñʽ.
-WebWork¸½´øÁËÒ»¸ö°ïÖúÀàÒÔ±ã¸üÈÝÒ×ʵÏÖÀàÐÍת»». ¸ÃÀàÊÇcom.opensymphony.webwork.util.WebWorkTypeConverter . Ëü±àдÀàÐÍת»»Æ÷¸ü¼ÓÈÝÒ×.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/UI Tags.html b/docs/chinese/wikidocs/UI Tags.html
deleted file mode 100644
index 0240dc416..000000000
--- a/docs/chinese/wikidocs/UI Tags.html
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
- WebWork 2 : UI±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Çëµã»÷Click±êÇ©ÒԲ鿴¹ØÓڸñêÇ©µÄ¸ü¶àÐÅÏ¢. ÐèҪעÒâµÄÊÇËùÓеÄUI±êÇ©¶¼ÒÀ¿¿ÖµÕ»ÔËÐÐ, Òò´ËÄãÐèÒª½«×Ö·û´®ÖµÓÃ(µ¥)ÒýºÅÀ¨ÆðÀ´.
ÕâЩ±êÇ©µÄ×îÖÕ»æÖƽá¹û¿ÉÒÔ½øÐж¨ÖÆ. ±êǩģ°æµÄλÖÃÓÉwebwork.propertiesÎļþÖеÄÊôÐÔwebwork.ui.theme¶¨Òå. ²Î¼ûÖ÷Ìâ ºÍÄ£°æ ÒÔÁ˽â¸ü¶àÐÅÏ¢.
-
-
-
- Ãû³Æ ±êÇ© ÃèÊö
-
-¸´Ñ¡¿ò <ww:checkbox /> »æÖÆÒ»¸ö¸´Ñ¡¿òÊäÈë×Ö¶Î
-
-¸´Ñ¡¿òÁбí <ww:checkboxlist /> »æÖÆÒ»¸ö¸´Ñ¡¿òÁбí
-
-×éºÏ¿ò <ww:combobox /> Ò»¸öÑ¡ÏîÁбíºÍÒ»¸öÎı¾¿òµÄ×éºÏ×é¼þ
-
-×é¼þ <ww:component /> »æÖÆÒ»¸ö¶¨ÖƵÄUI×é¼þ
-
-ÎļþÊäÈë¿ò <ww:file /> »æÖÆÒ»¸öÎļþÑ¡ÔñÊäÈë×Ö¶Î
-
-±íµ¥ <ww:form /> ¶¨ÒåÒ»¸öÊäÈë±íµ¥
-
-Òþ²Ø <ww:hidden /> »æÖÆÒ»¸öÒþ²Ø×Ö¶Î
-
-Îı¾±êÇ© <ww:label /> »æÖÆÒ»¸öÎı¾±êÇ©, ÏÔʾֻ¶ÁÐÅÏ¢
-
-ÃÜÂë <ww:password /> »æÖÆÒ»¸öÃÜÂëÊäÈë×Ö¶Î
-
-µ¥Ñ¡°´Å¥(Radio) <ww:radio /> »æÖÆÒ»¸öµ¥Ñ¡°´Å¥
-
-Ñ¡ÏîÁбí <ww:select /> »æÖÆÒ»¸öÑ¡ÏîÁбíÔªËØ
-
-Ìá½»°´Å¥ <ww:submit /> »æÖÆÒ»¸öÌá½»°´Å¥
-
-±í¸ñ <ww:table /> »æÖÆÒ»¸ö±í¸ñ
-
-Ñ¡Ï(TabbedPane) <ww:tabbedpane /> »æÖÆÒ»¸öÑ¡Ï
-
-Îı¾Óò <ww:textarea /> »æÖÆÒ»¸öÎı¾Óò
-
-Îı¾¿ò <ww:textfield /> »æÖÆÒ»¸öÎı¾¿ò
-
-ÁîÅÆ <ww:token /> ·ÀÖ¹±íµ¥Öظ´Ìá½»
-
- ¹ú¼Ê»¯±êÇ©
-
-I18n <ww:i18n /> ½«×ÊÔ´°ü·ÅÈëÕ»ÖÐ
-
-Text <ww:text /> »æÖÆ×ÊÔ´°üÖеÄ×Ö·û´®
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/URL tag.html b/docs/chinese/wikidocs/URL tag.html
deleted file mode 100644
index 8b1a99b3e..000000000
--- a/docs/chinese/wikidocs/URL tag.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
- WebWork 2 : URL±êÇ©
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- URL±êÇ©¹¹ÔìÒ»¸ö±àÂëµÄURL. Èç¹û²»Ö¸¶¨Öµ, ½«¸ø³öµ±Ç°Ò³ÃæµÄURL.
-
-ÊôÐÔ ±ØÐè ÃèÊö
-
-value ·ñ Ïò±êÇ©´«µÝÊý¾Ý.
-
-id ·ñ Èç¹ûÖ¸¶¨id, ½«²»Êä³öURL¶øÊ¹ÓÃid×÷Ϊ¼üÖµ½«Ëü±£´æÔÚActionContextÖÐ
-
-scheme ·ñ ¿ÉÒÔÊÇ"http"»ò"https"
-
- includeContext ·ñ ¾ö¶¨ÊÇ·ñ½«»·¾³Â·¾¶¼ÓÔÚ¾ø¶Ô·¾¶Ç°Ãæ. ȱʡֵÊÇfalse
-
- encode ·ñ ¾ö¶¨ÊÇ·ñ¶ÔÄÚÈݽøÐбàÂë
-
- includeParams ·ñ ¸Ã²ÎÊý¿ÉÒÔʹÓÃÖµ'none' (no params), 'get'(½ö°üº¬GET²ÎÊý)»ò'all'(°üÀ¨GETºÍPOST²ÎÊý). It is used when the url tag is used without a value or page attribute. Its value is looked up on the ValueStack. Èç¹ûûÓÐÖ¸¶¨½«Ê¹ÓÃ'get'.
-
-
-±¾ÀýÖÐ, ±íµ¥µÄactionÊôÐÔhiturl.action½«±»±àÂë.
-
-
-
<form action="<ww:url value=" 'hiturl.action'"/>" method="POST" >
...
</form>
-
±¾ÀýÖÐ, ÔÚURLÖÐÔö¼ÓÁËÃûÖµ¶Ô. URL½«×¼È·¹¹ÔìURL. Ò²¿ÉÒÔʹÓÃͨ³£µÄ·½Ê½"?"; i.e., - 'hiturl.action?user=john'.
-
<form action="<ww:url value=" 'hiturl.action'">
<ww:param name=" 'user'" value=" 'john'"/>
</ww:url>" method="POST" >
...
</form>
-
ȱʡÇé¿öÏÂ, 80¶Ë¿Ú×÷Ϊ"http"¶Ë¿Ú, 443¶Ë¿Ú×÷Ϊ"https"¶Ë¿Ú. ÎÞÂÛÈçºÎ, ijЩ·þÎñÆ÷, ÈçTomcat, ʹÓò»Í¬µÄȱʡ¶Ë¿Ú, Èç8080ºÍ8443. ¿ÉÒÔͨ¹ýÐÞ¸Äwebwork.propertiesÎļþÖеÄÅäÖÃÏîÀ´¸Ä±äËü:
-
- webwork.url.http.port
- webwork.url.https.port
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Upgrading from 1.4.html b/docs/chinese/wikidocs/Upgrading from 1.4.html
deleted file mode 100644
index d18252cf2..000000000
--- a/docs/chinese/wikidocs/Upgrading from 1.4.html
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
- WebWork 2 : Upgrading from 1.4
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-Webwork1.x was seperated into two projects, XWork and Webwork. From this, several classes have been moved to different package names.
-
- ActionSupport has moved from webwork.ActionSupport to com.opensymphony.xwork.ActionSupport
- doExecute() no longer exists, override execute()
- the methods addError and addErrorMessage are now addFieldError and addActionError respectively
-
-
-
- actions.xml/views.properties needs to be converted to xwork.xml
-If you're using an actions.xml file to configure your webwork 1, you can use the attached XSLT to convert the actions.xml file to a vanilla xwork.xml file.
-To apply this XSLT, you'll need to do the following:
-Get a copy of the XSLT. You can find the latest version in CVS in webwork/src/etc/actions.xsl . Next, find yourself an XSLT rendering engine. Xalan is a good choice and can be found at http://xml.apache.org/xalan-j/index.html
-Finally, do the conversion.
-
-
-
-
java org.apache.xalan.xslt.Process -IN actions.xml -XSL actions.xsl -OUT xwork.xml
-
Remember that you'll need to Xalan libraries in your classpath to run the above command.
-If you want to look at these pages directly in your browser, I recommend user Internet Explorer as it automagically formats XML documents reasonably. There one caveat though. WW1 had a way to shorten the declaration of actions by allowing you to specify a package prefix in webwork.properties file. Since this information is outside the actions.xml file, the XSLT is unable to take advantage of it. Consequently, you might need to edit the xwork.xml file to update the class names.
WebWork 1.x configuration used a pull paradigm to load action configurations when they are asked for, whereas WebWork2 builds the configuration up-front to make the configuration queryable. The webwork.MigrationConfiguration must therefore act as an adapter between these two paradigms. It does this by returning a custom RuntimeConfiguration which first tries the default XWork Configuration (which, by default, loads configuration information from a file named "xwork.xml" in the root of the classpath) and then attempts to load action configuration using the Configuration classes from WebWork 1.x. In this way, an application can be slowly converted over to WebWork2 while reusing the configuration and Actions from a WebWork 1.x application. One caveat in this is that your migrated application MUST be rebuilt against the WebWork2 and migration jar files, as the classloader will rightly recognize that the webwork.Action and webwork.ActionSupport in WebWork 1.x are not the same as those provided by the migration jar files. Other than that, it should be seamless (and let us know if it isn't).If the webwork.MigrationRuntimeConfiguration does not find the action configuration using the RuntimeConfiguration from the supplied RuntimeConfiguration (which is acquried from the Xwork DefaultConfiguration and will load configurations from all of the sources configured for XWork / WebWork2), it will build an ActionConfiguration by instantiating an Action using the ActionFactories from WebWork 1.x. The ActionFactory stack used is a subset of the default ActionFactory stack used in WebWork 1.x:
-
factory = new JavaActionFactory();
factory = new ScriptActionFactoryProxy(factory);
factory = new XMLActionFactoryProxy(factory);
factory = new PrefixActionFactoryProxy(factory);
factory = new JspActionFactoryProxy(factory);
factory = new CommandActionFactoryProxy(factory);
factory = new AliasingActionFactoryProxy(factory);
factory = new CommandActionFactoryProxy(factory);
factory = new ContextActionFactoryProxy(factory);
-
Some of the ActionFactory classes have been left out as they are handled by Interceptors in WebWork2. If the Action instance is created (meaning that the configuration has been found in the webwork.properties or actions.xml files used by the WebWork 1.x configuration classes) a parameter Map is created by introspecting the Action instance. A Map is needed for results and, again, WebWork 1.x used a pull paradigm to find results when they were needed, so a LazyResultMap is created which extends HashMap and overrides get() to look up the Result configuration if it has not previously been loaded. If the result ends in the Action suffix (defaulting to ".action"), then a ChainingResult is created, otherwise a ServletDispatcherResult is created. Using the Action class of the instantiated Action, the Map of parameters introspected from the Action instance, and the LazyResultMap, a new ActionConfig is created. The ActionConfig is saved into a special Package, "webwork-migration", so that it will pick up the default Interceptor stack defined for that package. The "webwork-migration" package is defined in a webwork-migration.xml file which is included in the migration jar file and which is automatically added to the Xwork configuration providers when the MigrationConfiguration is used:
-
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd" >
<xwork>
<include file="webwork-default.xml" />
<package name="webwork-migration" abstract="true" extends="webwork-default" >
<interceptors>
<interceptor-stack name="migrationStack" >
<interceptor-ref name="timer" />
<interceptor-ref name="logger" />
<interceptor-ref name="chain" />
<interceptor-ref name="static-params" />
<interceptor-ref name="prepare" />
<interceptor-ref name="params" />
<interceptor-ref name="workflow" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="migrationStack" />
</package>
</xwork>
-
Here we can see that a number of the functions previously performed by ActionFactories in WebWork 1.x are now replaced by Interceptors in WebWork2, including the parameters, the chaining, calling prepare(), and the workflow (which was formerly implemented in ActionSupport in WebWork 1.x).
By creating and saving the ActionConfig in the PackageConfig for the "webwork-migration" package, the ActionConfig for the migrated Action is available for future calls, obviating the need to re-parse the old configuration files and making the configuration for the Action available for querying via the configuration API for tools such as the configuration browser.
-
-The biggest change is the use of OGNL for accessing object properties. Properties are no longer accessed with a forward slash "/ " but with a dot ". " Also, rather than using ".. " to traverse down the stack, we now use "[n]" where n is some positive number. Lastly, in WebWork 1.x one could access special named objects (the request scope attributes to be exact) by using "@foo", but now special variables are accessed using "#foo". However, it is important to note that "#foo" does NOT access the request attributes. "#foo" is merely a request to another object in the OgnlContext other than the root. See OGNL reference for more details.The property tag is now only used to print out values from the stack. In WW1, it was also used to set a variable in the scope, and to push properties to the top of the stack. These functions are now performed by the set and push tags.
The action tag does not evaluate the body section any more and does not push the executed action onto the ValueStack. Instead, use the "id " attribute to assign a name to the action and reference it as "#id ".
Lets enumerate some examples of differences between code snips using WW:WebWork and WW:WebWork .
-There are numerous changes in syntax. First of all there are new tags and secondly there is a new expression language. Here's a small example:Webwork 1
-
-
<ww:property value="a/b" >
<ww:property value="foo" />
</ww:property>
-
-Webwork 2
-
-
<ww:push value="a.b" >
<ww:property value="foo" />
</ww:push>
-
One can note that the "push" tag doesn't just push it pops too at the end of the tag. Surprise! Also note the "." instead of the "/" for traversing object properties.
-
-
- List errors posted by an Action
-Webwork 1
-
-
<webwork:if test="hasErrorMessages == true" >
ERROR:<br />
<font color="red" >
<webwork:iterator value="errorMessages" >
<webwork:property/> <br />
</webwork:iterator>
</font>
</webwork:if>
-
-Webwork 2
-
-
<webwork:if test="hasErrors()" >
ERROR:<br />
<font color="red" >
<webwork:iterator value="actionErrors" >
<webwork:property/> <br />
</webwork:iterator>
</font>
</webwork:if>
-
-
-
-
- If you're using Velocity for views, you'll need to make sure you have the following snippet. Specifically note that the <load-on-startup> tag is now required so that the servlet can initialize some important Velocity properties.
-
-
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>com.opensymphony.webwork.views.velocity.WebWorkVelocityServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
-
-
-
-
- Set the property webwork.velocity.configfile in your _webwork.properties _. For example:
-
-
webwork.velocity.configfile=velocity.properties
-
-
-
-WebWork will use this file to initialize the Velocity engine. The search path for the file is:
-
- context root (web root)
- WEB-INF/
- classpath
-
- Additional Steps:
-
- If you used the <ww:action taglib in 1.3… you used to refernece the java Action classname. In 2.x this reference is now the action name not the class. you will need to change all your old references in your view.
-
-
-It might be possible to copy WW1's ResultException, and write an Interceptor that catches the ResultExceptions and add the result of getMessage() to the actionErrors of the
-executed Action and return ResultException.getResult().
Maybe it would be possible to include ResultException in WW2 too to make migration easier?!
-
-It can be replaced by directly using java.text.DateFormat
-The new method to use is addFieldError(String, String) .
-
The new method is now addActionError(String) .
-The ValueStack is com.opensymphony.xwork.util.OgnlValueStack
The old methods pushValue and popValue are renamed to simply push and
-pop .An instance of the ValueStack can be obtained by using ActionContext.getContext().getValueStack instead of the old ValueStack.getStack() .
-
Instead of implementing ServletRequestAware etc the
-[Servlet]ActionContext.getXXX -methods can be used to obtain application-map, request, response etc.
-The CommandDriven interface is removed. It is not neccesary to implement a special interface when working with commands anymore. Use the method attribute in your action -Element in xwork.xml to tell xwork which method to invoke on your action.
-
You can see which alias you're accessing by doing this: ActionContext.getContext().getActionInvocation().getProxy().getActionName()
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Upgrading from 2.0.html b/docs/chinese/wikidocs/Upgrading from 2.0.html
deleted file mode 100644
index 2ae842a58..000000000
--- a/docs/chinese/wikidocs/Upgrading from 2.0.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
- WebWork 2 : Upgrading from 2.0
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Upgrading from Webwork 2.0 is rather trivial. This version of webwork adds enhancements and bug fixes with hardly any configuration or syntax changes. Follow these two simple steps and you should be on your way with the latest and greatest from the OS crew.
-
-
- Update/Replace your current binaries with the new binaries located in the distribution download under the lib/core . You may also want to grab any related jars from the lib/optional folder. Don't forget the webwork binary webwork-2.1.jar in the base directory of the distribution download. Review the Dependencies for Webwork.
- Check out the Release Notes - 2.1 to see if any of changes need to be applied to your code base.
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Upgrading from 2.1.1.html b/docs/chinese/wikidocs/Upgrading from 2.1.1.html
deleted file mode 100644
index 373a65d45..000000000
--- a/docs/chinese/wikidocs/Upgrading from 2.1.1.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : Upgrading from 2.1.1
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Upgrading from 2.1.1 to 2.1.2 is very easy. Simply copy over the new webwork.jar file and make sure you are running all the correct Dependencies – especially make sure you are using XWork 1.0.3.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Upgrading from 2.1.2.html b/docs/chinese/wikidocs/Upgrading from 2.1.2.html
deleted file mode 100644
index e7a673ca7..000000000
--- a/docs/chinese/wikidocs/Upgrading from 2.1.2.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : Upgrading from 2.1.2
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Upgrading from 2.1.2 to 2.1.3 is very easy. Simply copy over the new webwork.jar. There have been no new dependencies.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Upgrading from 2.1.3.html b/docs/chinese/wikidocs/Upgrading from 2.1.3.html
deleted file mode 100644
index f425e6298..000000000
--- a/docs/chinese/wikidocs/Upgrading from 2.1.3.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : Upgrading from 2.1.3
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Since this release is merely a preview release of the new tag syntax (see Release Notes - 2.1.4 ) and no other changes have been made, simply copying over the new webwork jar file is all that is needed to upgrade. No other libraries have changed.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Upgrading from 2.1.4.html b/docs/chinese/wikidocs/Upgrading from 2.1.4.html
deleted file mode 100644
index c5467df07..000000000
--- a/docs/chinese/wikidocs/Upgrading from 2.1.4.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : Upgrading from 2.1.4
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Upgrading from 2.1.4 is pretty easy as no new libraries have been introduced. However, the TLD (taglib definition file) has been modified to support more JavaScript events, such as onBlur, onChange, etc. Be sure to check that you are using the latest TLD. This is automatic if you point web.xml to /WEB-INF/webwork.jar .
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Upgrading from 2.1.5.html b/docs/chinese/wikidocs/Upgrading from 2.1.5.html
deleted file mode 100644
index 71c169377..000000000
--- a/docs/chinese/wikidocs/Upgrading from 2.1.5.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : Upgrading from 2.1.5
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Upgrading from 2.1.5 to 2.1.6 requires that you copy over the new webwork-2.1.6.jar and xwork-1.0.4.jar. Note that WebWork 2.1.6 includes a new version of XWork, version 1.0.4.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Upgrading from 2.1.html b/docs/chinese/wikidocs/Upgrading from 2.1.html
deleted file mode 100644
index 86a3de027..000000000
--- a/docs/chinese/wikidocs/Upgrading from 2.1.html
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- WebWork 2 : Upgrading from 2.1
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Upgrading from 2.1 to 2.1.1 is very easy. Simply copy over the new webwork.jar file and make sure you are running all the correct Dependencies .
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Using Checkboxes - EditAction.java.html b/docs/chinese/wikidocs/Using Checkboxes - EditAction.java.html
deleted file mode 100644
index b2e207294..000000000
--- a/docs/chinese/wikidocs/Using Checkboxes - EditAction.java.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
- WebWork 2 : Using Checkboxes - EditAction.java
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
-
-
package cash.action;
import org.apache.log4j.Logger;
import cash.config.ConfigManager;
import cash.model.User;
import cash.util.HibernateUtil;
import cash.validator.PasswordFormatValidator;
import net.sf.hibernate.LockMode;
/**
* Edit a user
* @author Joel Hockey
* @version $Id: Using\040Checkboxes\040-\040EditAction.java.html,v 1.1 2005/03/21 04:16:01 plightbo Exp $
*/
public class EditAction extends HibernateAction {
private static final Logger LOG = Logger.getLogger(EditAction.class);
private User m_user = new User();
private String m_repeatPassword;
/** return user to be edited. */
public User getUser() { return m_user; }
/** @param pwd repeat of password */
public void setRepeatPassword(String pwd) { m_repeatPassword = pwd; }
/** @return repeat password */
public String getRepeatPassword() { return m_repeatPassword; }
/** override super */
public String execute() throws Exception {
LOG.debug("EditAction started" );
User u = (User)get("user" );
HibernateUtil.currentSession().lock(u, LockMode.NONE);
if (!PasswordFormatValidator.PASSWORD_MASK.equals(m_user.getPassword())) {
if (!u.changePassword(m_user.getPassword())) {
addFieldError("user.password" , "password must be different to previous "
+ ConfigManager.getConfig().getUser().getNoRepeatHistory() + " passwords" );
return INPUT;
}
}
m_user.copy(u);
HibernateUtil.currentSession().save(u);
User loginUser = (User)get(LoginAction.LOGIN_USER);
if (u.getId() == loginUser.getId()) {
set(LoginAction.LOGIN_USER, u);
}
return SUCCESS;
}
}
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Using Checkboxes - User.java.html b/docs/chinese/wikidocs/Using Checkboxes - User.java.html
deleted file mode 100644
index c95018180..000000000
--- a/docs/chinese/wikidocs/Using Checkboxes - User.java.html
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
- WebWork 2 : Using Checkboxes - User.java
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
-
-
package cash.model;
import net.sf.hibernate.HibernateException;
import org.apache.log4j.Logger;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.SortedSet;
import java.util.TimeZone;
import java.util.TreeSet;
import cash.config.ConfigManager;
import cash.util.Hex;
import cash.util.HibernateUtil;
import cash.util.UtcDate;
import cash.validator.PasswordFormatValidator;
/**
* Represents a User object. Clients of this class should instantiate a User object with the
* multi-arg constructor rather than using setters.
*
* @author Joel Hockey
* @version $Id: Using\040Checkboxes\040-\040User.java.html,v 1.1 2005/03/21 04:16:01 plightbo Exp $
* @hibernate.class
* table="user"
* dynamic-update="true "
* optimistic-lock="version"
*/
public class User implements java.io.Serializable {
private static final Logger LOG = Logger.getLogger(User.class);
private static MessageDigest s_md5;
private static SecureRandom s_random;
private static final int MAX_LOGIN_FAILURE_COUNT = 20;
private static final boolean RESET_LOCKED_OUT_AFTER_TIME = true ;
private static final long RESET_LOCKED_OUT_TIME = 1 * 60 * 60 * 1000;
private int m_id;
private int m_version;
private String m_username;
private String m_password;
private Date m_passwordChangeDate;
private String m_hashedPassword;
private SortedSet m_passwordHistory = new TreeSet();
private String m_salt;
private byte [] m_saltBytes;
private Date m_createDate;
private String m_email;
private Locale m_locale;
private TimeZone m_timeZone;
private String m_telephone;
private Date m_lastSuccessfulLogin;
private String m_lastSuccessfulLoginIp;
private Date m_lastFailedLogin;
private String m_lastFailedLoginIp;
private int m_loginFailureCount;
private int m_maxLoginFailureCount = MAX_LOGIN_FAILURE_COUNT;
private boolean m_resetLockedOutAfterTime = RESET_LOCKED_OUT_AFTER_TIME;
private long m_resetLockedOutTime = RESET_LOCKED_OUT_TIME;
private boolean m_lockedOut = false ;
private boolean m_disabled = false ;
private boolean m_isSuperUser = false ;
private boolean m_passwordNeverExpires = false ;
private Set m_privileges = new HashSet();
static {
try {
s_md5 = MessageDigest.getInstance("MD5" );
s_random = SecureRandom.getInstance("SHA1PRNG" );
} catch (GeneralSecurityException gse) {
LOG.error("Error creating MD5 or SHA1PRNG" , gse);
throw new RuntimeException("Error creating MD5 or SHA1PRNG" );
}
}
/** default constructor for Hibernate */
public User() { }
/**
* Create a User.
*
* @param username The username for logging in
* @param password The user's password
* @param email The user's email
* @throws InvalidPasswordException if password is invalid.
*/
public User(String username, String password, String email) throws InvalidPasswordException {
m_username = username;
initSalt();
if (!PasswordFormatValidator.checkPasswordFormat(password)) {
throw new InvalidPasswordException();
}
m_hashedPassword = hashPassword(password);
m_createDate = UtcDate.createUtcDate();
m_email = email;
m_locale = Locale.getDefault();
m_timeZone = TimeZone.getDefault();
}
/** @param id The id to set */
public void setId(int id) { m_id = id; }
/**
* @return unique id of this User. Generated by DB.
* @hibernate.id
* generator-class="native "
*/
public int getId() { return m_id; }
/** @param version The version of this object */
public void setVersion(int version) { m_version = version; }
/**
* @return version of this object
* @hibernate.version
*/
public int getVersion() { return m_version; }
/** @param username The username to set */
public void setUsername(String username) { m_username = username; }
/**
* @return username
* @hibernate.property
* length="32"
* unique="true "
* not-null ="true "
*/
public String getUsername() { return m_username; }
/**
* Set's the user's password without updating history or checking validity.
* This should only be used at User creation time, and password validity
* should be checked externally to this method.
* Do not use to update password, see {@link #changePassword(String )}
* @param password user's password
*/
public void setPassword(String password) {
m_password = password;
if (m_salt == null ) {
initSalt();
}
m_hashedPassword = hashPassword(password);
m_passwordChangeDate = UtcDate.createUtcDate();
}
/**
* This method is provided to help at User creation time. It will only return
* valid values if {@link #setPassword(String )} has already been called.
* @return plaintext password.
*/
public String getPassword() { return m_password; }
/** @param time Date (UTC) user last changed password. */
public void setPasswordChangeDate(Date time) { m_passwordChangeDate = time; }
/**
* @return UTC date of last password change
* @hibernate.property
* type="cash.model.TimestampType"
* length="23"
*/
public Date getPasswordChangeDate() { return m_passwordChangeDate; }
/**
* Sets the user's hashed password. This method is provided only for the use
* of hibernate. Users of this class should not call this method.
* Use the {@link #setPassword(String )} method to set the plaintext password.
* @param hash The hashed password to set
*/
public void setHashedPassword(String hash) {
m_hashedPassword = hash;
}
/**
* @return hashed password
* @hibernate.property
* column="pwd"
* length="32"
* not-null ="true "
*/
public String getHashedPassword() { return m_hashedPassword; }
/**
* @param oldPasswords The last n passwords, where n
* is defined as noRepeatHistory in User configuration. Passwords are ordered
* in descending order of creation.
*/
public void setPasswordHistory(SortedSet oldPasswords) { m_passwordHistory = oldPasswords; }
/**
* @return Password history
* @hibernate.set
* lazy="true "
* sort="cash.model.PasswordHistory"
* inverse="true "
* cascade="all"
* @hibernate.collection-key
* column="userId"
* @hibernate.collection-one-to-many
* class="cash.model.PasswordHistory"
*/
public SortedSet getPasswordHistory() { return m_passwordHistory; }
/** @param random The random salt to be used with password */
public void setSalt(String random) {
m_salt = random;
m_saltBytes = Hex.fromString(random);
}
/**
* @return random salt used with password
* @hibernate.property
* length="32"
* not-null ="true "
*/
public String getSalt() { return m_salt; }
/** @param time create date */
public void setCreateDate(Date time) { m_createDate = time; }
/**
* @return Date in UTC user was created.
* @hibernate.property
* update="false "
* not-null ="true "
* type="cash.model.TimestampType"
* length="23"
*/
public Date getCreateDate() { return m_createDate; }
/** @param email User's email */
public void setEmail(String email) { m_email = email; }
/**
* @return User's email
* @hibernate.property
* length="255"
* not-null ="true "
*/
public String getEmail() { return m_email; }
/** @param locale The User's locale. This should be a 2 character field. */
public void setLocale(Locale locale) { m_locale = locale; }
/**
* @return User's locale. Uses 2 character ISO-something value.
* @hibernate.property
* not-null ="true "
*/
public Locale getLocale() { return m_locale; }
/** @param timeZone User's time zone */
public void setTimeZone(TimeZone timeZone) { m_timeZone = timeZone; }
/**
* @return User's timezone
* @hibernate.property
* not-null ="true "
*/
public TimeZone getTimeZone() { return m_timeZone; }
/** @param telephone User's telephone */
public void setTelephone(String telephone) { m_telephone = telephone; }
/**
* @return Telephone of user
* @hibernate.property
* length="16"
*/
public String getTelephone() { return m_telephone; }
/** @param time user's last successful login date in UTC. */
public void setLastSuccessfulLogin(Date time) { m_lastSuccessfulLogin = time; }
/**
* @return UTC date of last successful login
* @hibernate.property
* type="cash.model.TimestampType"
* length="23"
*/
public Date getLastSuccessfulLogin() { return m_lastSuccessfulLogin; }
/** @param ip IP address used for user's last successful login. */
public void setLastSuccessfulLoginIp(String ip) { m_lastSuccessfulLoginIp = ip; }
/**
* @return IP address used for last successful login
* @hibernate.property
*/
public String getLastSuccessfulLoginIp() { return m_lastSuccessfulLoginIp; }
/** @param time user's last failed login date in UTC. */
public void setLastFailedLogin(Date time) { m_lastFailedLogin = time; }
/**
* @return UTC date of last failed login
* @hibernate.property
* type="cash.model.TimestampType"
* length="23"
*/
public Date getLastFailedLogin() { return m_lastFailedLogin; }
/** @param ip IP address used for user's last failed login. */
public void setLastFailedLoginIp(String ip) { m_lastFailedLoginIp = ip; }
/**
* @return IP address used for last failed login
* @hibernate.property
*/
public String getLastFailedLoginIp() { return m_lastFailedLoginIp; }
/**
* Sets the number of times that a user has failed when attempting to login.
* This value is reset when a user logs in successfully, or their account is reset.
* @param count the value to set.
*/
public void setLoginFailureCount(int count) { m_loginFailureCount = count; }
/**
* @return The number of times that a user has failed when attempting to login.
* This value is reset when a user logs on successfully, or their account is reset.
* @hibernate.property
*/
public int getLoginFailureCount() { return m_loginFailureCount; }
/**
* @param count The maximum number of times that a user may fail to login before
* their account is locked out
*/
public void setMaxLoginFailureCount(int count) { m_maxLoginFailureCount = count; }
/**
* @return The maximum number of times that a user may fail to login before their account
* is locked out.
* @hibernate.property
*/
public int getMaxLoginFailureCount() { return m_maxLoginFailureCount; }
/**
* @param reset Whether this user's account will be unlocked after a specified time when it is locked
* due to login failure.
* @see #setResetLockedOutAfterTime(boolean ) setResetLockedOutAfterTime
*/
public void setResetLockedOutAfterTime(boolean reset) { m_resetLockedOutAfterTime = reset; }
/**
* @return Whether this user's account will be unlocked after a specified time when it
* is locked out due to login failure.
* @see #getResetLockedOutAfterTime getResetLockedOutAfterTime
* @hibernate.property
*/
public boolean getResetLockedOutAfterTime() { return m_resetLockedOutAfterTime; }
/**
* @param time The time in millis between login attempts before login failure count is reset. Login failure
* count will only be reset if the Reset Locked Out After Time boolean is set to true .
*/
public void setResetLockedOutTime(long time) { m_resetLockedOutTime = time; }
/**
* @return Time in milliseconds before account is auto-reset after login lockout.
* @hibernate.property
*/
public long getResetLockedOutTime() { return m_resetLockedOutTime; }
/** @param lockedOut User's locked out status. */
public void setLockedOut(boolean lockedOut) { m_lockedOut = lockedOut; }
/**
* @return Whether this user's account is locked out
* @hibernate.property
*/
public boolean isLockedOut() { return m_lockedOut; }
/** @param disabled User's disabled status. */
public void setDisabled(boolean disabled) { m_disabled = disabled; }
/**
* @return Whether this user's account disabled
* @hibernate.property
*/
public boolean isDisabled() { return m_disabled; }
/** @param superUser True if user is super user */
public void setSuperUser(boolean superUser) { m_isSuperUser = superUser; }
/**
* @return Whether this user is a super user
* @hibernate.property
*/
public boolean isSuperUser() { return m_isSuperUser; }
/** @param expires True if user's password never expires */
public void setPasswordNeverExpires(boolean expires) { m_passwordNeverExpires = expires; }
/**
* @return Whether this user's password ever expires
* @hibernate.property
*/
public boolean getPasswordNeverExpires() { return m_passwordNeverExpires; }
/** @param privs Set of privileges for this user */
public void setPrivileges(Set privs) { m_privileges = privs; }
/**
* @return Set of Privileges for this User.
* @hibernate.set
* table="user_priv"
* lazy="true "
* cascade="all"
* @hibernate.collection-key
* column="userId"
* @hibernate.collection-element
* column="priv"
* type="string"
*/
public Set getPrivileges() { return m_privileges; }
/** convenience method of OGNL */
public void setPriv(String [] privs) {
for (int i = 0; i < privs.length; i++) {
m_privileges.add(privs[i]);
}
}
/**
* Changes the user's password. Password must meet criteria
* defined in configuration. The user's password will be appended to
* a random 20 byte salt and then hashed using MD5 to create the
* value that will be stored in the DB. The current Hibernate Session
* will be used to update pwd history.
*
* @param password The password to set
* @return true if password is changed, false if password was not changed
* because it did not meet password requirements.
* @throws HibernateException if error updating password history
*/
public boolean changePassword(String password) throws HibernateException {
if (!PasswordFormatValidator.checkPasswordFormat(password)) {
return false ;
}
String hashedPwd = hashPassword(password);
LOG.debug("checking if password is same as current" );
if (hashedPwd.equals(m_hashedPassword)) {
LOG.info("password is same as current password" );
return false ;
}
LOG.debug("checking if password exists in history. History size is " + m_passwordHistory.size());
for (Iterator i = getPasswordHistory().iterator(); i.hasNext(); ) {
PasswordHistory ph = (PasswordHistory)i.next();
if (hashedPwd.equals(ph.getHashedPassword())) {
LOG.info("password already used as one of last "
+ ConfigManager.getConfig().getUser().getNoRepeatHistory());
return false ;
}
}
PasswordHistory ph = new PasswordHistory(this , m_hashedPassword);
m_passwordHistory.add(ph);
LOG.debug("saving old password into password history" );
HibernateUtil.currentSession().save(ph);
if (m_passwordHistory.size() > ConfigManager.getConfig().getUser().getNoRepeatHistory() - 1) {
PasswordHistory toRemove = (PasswordHistory)m_passwordHistory.first();
LOG.info("Removing password history object for user " + m_username
+ " created: " + toRemove.getCreateDate());
m_passwordHistory.remove(toRemove);
HibernateUtil.currentSession().delete(toRemove);
}
m_hashedPassword = hashedPwd;
m_passwordChangeDate = UtcDate.createUtcDate();
return true ;
}
/**
* Hashes input pwd to see if it equals stored pwd hash value.
* @param pwd Password to check
* @return true if passwords are equal.
*/
public boolean passwordEquals(String pwd) {
String hash = hashPassword(pwd);
return m_hashedPassword.equalsIgnoreCase(hash);
}
/**
* Hashes salt and password to produce hashed password.
* @param pwd Password to hash
* @return Hex encoding of MD5 hash of salt and pwd
*/
private String hashPassword(String pwd) {
byte [] pwdBytes = pwd.getBytes();
byte [] in = new byte [OS:m_saltBytes.length + pwdBytes.length];
System .arraycopy(m_saltBytes, 0, in, 0, m_saltBytes.length);
System .arraycopy(pwdBytes, 0, in, m_saltBytes.length, pwdBytes.length);
byte [] out = s_md5.digest(in);
return Hex.toString(out);
}
/** initialises salt */
private void initSalt() {
m_saltBytes = new byte [OS:16];
s_random.nextBytes(m_saltBytes);
m_salt = Hex.toString(m_saltBytes);
}
/** @return String representation of User */
public String toString() {
StringBuffer sb = new StringBuffer (500);
sb.append("[" ).append("ID:" ).append(m_id)
.append(",version:" ).append(m_version)
.append(",hashedPassword:" ).append(m_hashedPassword)
.append(",salt:" ).append(m_salt)
.append(",createDate:" ).append(m_createDate)
.append(",email:" ).append(m_email)
.append(",locale:" ).append(m_locale)
.append(",timeZone:" ).append(m_timeZone)
.append(",telephone:" ).append(m_telephone)
.append(",lastSuccessfulLogin:" ).append(m_lastSuccessfulLogin)
.append(",lastSuccessfulLoginIp:" ).append(m_lastSuccessfulLoginIp)
.append(",lastFailedLogin:" ).append(m_lastFailedLogin)
.append(",lastFailedLoginIp:" ).append(m_lastFailedLoginIp)
.append(",loginFailureCount:" ).append(m_loginFailureCount)
.append(",maxLoginFailureCount:" ).append(m_maxLoginFailureCount)
.append(",resetLockedOutAfterTime:" ).append(m_resetLockedOutAfterTime)
.append(",resetLockedOutTime:" ).append(m_resetLockedOutTime)
.append(",lockedOut:" ).append(m_lockedOut)
.append(",disabled:" ).append(m_disabled)
.append(",isSuperUser:" ).append(m_isSuperUser)
.append(",passwordNeverExpires:" ).append(m_passwordNeverExpires)
.append(",passwordChangeDate:" ).append(m_passwordChangeDate)
.append(",privs:" ).append(m_privileges);
return sb.toString();
}
/**
* Copies editable data from this object to User object provided. This is used
* in Edit actions. Not all fields are copied, only those that are editable
* @param user Object to copy to
*/
public void copy(User user) {
user.setUsername(m_username);
user.setEmail(m_email);
user.setLocale(m_locale);
user.setTimeZone(m_timeZone);
user.setTelephone(m_telephone);
user.setLockedOut(m_lockedOut);
user.setDisabled(m_disabled);
user.setPasswordNeverExpires(m_passwordNeverExpires);
if (m_privileges.size() <= user.getPrivileges().size() / 2) {
LOG.debug("detected that many privs are removed, clearing all" );
user.setPrivileges(m_privileges);
} else {
List toRemove = new ArrayList();
for (Iterator i = user.getPrivileges().iterator(); i.hasNext(); ) {
String priv = (String )i.next();
if (!m_privileges.contains(priv)) {
toRemove.add(priv);
}
}
for (int i = 0; i < toRemove.size(); i++) {
user.getPrivileges().remove(toRemove.get(i));
}
for (Iterator i = m_privileges.iterator(); i.hasNext(); ) {
user.getPrivileges().add(i.next());
}
}
}
}
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Using Checkboxes - Velocity and HTML.html b/docs/chinese/wikidocs/Using Checkboxes - Velocity and HTML.html
deleted file mode 100644
index 841a57d5f..000000000
--- a/docs/chinese/wikidocs/Using Checkboxes - Velocity and HTML.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- WebWork 2 : Using Checkboxes - Velocity and HTML
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 18, 2004 by plightbo .
-
-
- Velocity View - edit.vm:
-
-
<html>
<body onload="document.forms[0].elements[0].focus()" >
<a href="home.vm" >Home</a><br/>
#if ($fieldErrors)
#foreach ($error in $fieldErrors)
$error<br>
#end
#end
#if ($actionErrors)
#foreach ($error in $actionErrors)
$error<br>
#end
#end
<form name="edit" action="edit.action" method="post" >
<table>
<tr><td>Name</td><td>$user.username</td></tr>
#formRowText("Password" "user.password" $stack.findValue("@cash.validator.PasswordFormatValidator@PASSWORD_MASK" ))
#formRowText("Repeat Password" "repeatPassword" $stack.findValue("@cash.validator.PasswordFormatValidator@PASSWORD_MASK" ))
#formRowText("Email" "user.email" $!user.email)
#formRowSelect("Language" "user.locale" $stack.findValue("@cash.util.Html@getInstance()" ).getLocales($locale) $!user.locale.toString())
#formRowSelect("Time Zone" "user.timeZone" $stack.findValue("@cash.util.Html@getInstance()" ).getTimeZones($locale) $!user.timeZone.ID)
#formRowText("Telephone" "user.telephone" $!user.telephone)
#formRowCheckbox("Locked Out" "user.lockedOut" "true " $user.lockedOut)
#formRowCheckbox("Disabled" "user.disabled" "true " $user.disabled)
#set ($privs = [OS:"boss" , "admin" , "early" , "late" , "train" ])
#foreach ($priv in $privs)
#set ($checked = $user.privileges.contains($priv))
#formRowCheckbox($priv "user.priv" $priv $checked)
#end
<tr><td> </td><td><input type="submit" name="submit" value="submit" ></td></tr>
</table>
<input type="hidden" name="user.username" value="$user.username" >
</form>
</body>
</html>
-
Velocity Macros - macros.vm:
-
-
#macro (formRowText $label $name $value)
<tr><td><label for ="$name" >$label</label></td><td><input id="$name" type="text" name="$name" value="$!value" ></td></tr>
#end
#macro (formRowSelect $label $name $options $selectedValue)
<tr><td><label for ="$name" >$label</label></td><td><select id="$name" name="$name" >
#foreach ($option in $options)
<option#if ($option.get(0).equals($selectedValue)) selected#end value="$option.get(0)" >$option.get(1)</option>
#end
</select></td></tr>
#end
#macro (formRowCheckbox $label $name $value $checked)
<tr><td><label for ="$name.$value" >$label</label></td><td><input id="$name.$value" type="checkbox" name="$name" value="$value" #if ($checked) checked#end ></td></tr>
#end
-
Note that I don't use the webwork UI tags. (The HTML that comes out of them looks like vomit.)
The HTML generated from above looks like:
-
-
<html>
<body onload="document.forms[0].elements[0].focus()" >
<a href="home.vm" >Home</a><br/>
<form name="edit" action="edit.action" method="post" >
<table>
<tr><td>Name</td><td>user</td></tr>
<tr><td><label for ="user.password" >Password</label></td><td><input id="user.password" type="text" name="user.password" value="********" ></td></tr>
<tr><td><label for ="repeatPassword" >Repeat Password</label></td><td><input id="repeatPassword" type="text" name="repeatPassword" value="********" ></td></tr>
<tr><td><label for ="user.email" >Email</label></td><td><input id="user.email" type="text" name="user.email" value="user@example.com" ></td></tr>
<tr><td><label for ="user.locale" >Language</label></td><td><select id="user.locale" name="user.locale" >
<option value="en" >English</option>
<option selected value="en_AU" >English (Australia)</option>
<option value="en_US" >English (United States)</option>
<option value="en_GB" >English (United Kingdom)</option>
<option value="es" >Spanish</option>
<option value="fr" >French</option>
<option value="de" >German</option>
</select></td></tr>
<tr><td><label for ="user.timeZone" >Time Zone</label></td><td><select id="user.timeZone" name="user.timeZone" >
<option selected value="America/Los_Angeles" >(GMT-08:00) Los Angeles</option>
<option value="Europe/London" >(GMT+00:00) London</option>
<option value="Australia/Brisbane" >(GMT+10:00) Brisbane</option>
</select></td></tr>
<tr><td><label for ="user.telephone" >Telephone</label></td><td><input id="user.telephone" type="text" name="user.telephone" value="134" ></td></tr>
<tr><td><label for ="user.lockedOut.true " >Locked Out</label></td><td><input id="user.lockedOut.true " type="checkbox" name="user.lockedOut" value="true " ></td></tr>
<tr><td><label for ="user.disabled.true " >Disabled</label></td><td><input id="user.disabled.true " type="checkbox" name="user.disabled" value="true " ></td></tr>
<tr><td><label for ="user.priv.boss" >boss</label></td><td><input id="user.priv.boss" type="checkbox" name="user.priv" value="boss" ></td></tr>
<tr><td><label for ="user.priv.admin" >admin</label></td><td><input id="user.priv.admin" type="checkbox" name="user.priv" value="admin" ></td></tr>
<tr><td><label for ="user.priv.early" >early</label></td><td><input id="user.priv.early" type="checkbox" name="user.priv" value="early" ></td></tr>
<tr><td><label for ="user.priv.late" >late</label></td><td><input id="user.priv.late" type="checkbox" name="user.priv" value="late" ></td></tr>
<tr><td><label for ="user.priv.train" >train</label></td><td><input id="user.priv.train" type="checkbox" name="user.priv" value="train" ></td></tr>
<tr><td> </td><td><input type="submit" name="submit" value="submit" ></td></tr>
</table>
<input type="hidden" name="user.username" value="user" >
</form>
</body>
</html>
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Using Checkboxes.html b/docs/chinese/wikidocs/Using Checkboxes.html
deleted file mode 100644
index c59c9c919..000000000
--- a/docs/chinese/wikidocs/Using Checkboxes.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
- WebWork 2 : Using Checkboxes
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
-
-The biggest gotcha for newbies is that you must set the 'value' attribute in the html <input> field to use Checkboxes with WW. By default your browser will set this to some value. Firebird uses "on" - not sure what IE or others use. You must make this a sensible value for whatever property you are setting.
-
-HTML:
-
-
<input type="checkbox" name="user.lockedOut" value="true " />
-
If the user checks this box, the browser will send "user.lockedOut=true" in the QueryString and action.getUser().setLockedOut(true) will be called. If the user does not check the box, the browser will not send anything, so make sure that you have initialised lockedOut to false to start with.
-
-
-
private boolean m_lockedOut = false ;
public void setLockedOut(boolean lockedOut) { m_lockedOut = lockedOut; }
-
-
-Our user has a number of priviliges that are stored as a Set of strings. To use checkboxes for these, we have HTML that looks like:
-
-
-
<input type="checkbox" name="user.priv" value="boss" />
<input type="checkbox" name="user.priv" value="admin" />
<input type="checkbox" name="user.priv" value="manager" />
-
Say a user checks the first 2; the browser will send the query string: user.priv=boss&user.priv=admin.
OGNL will end up calling
-
action.getUser().setPriv(String [] {"boss" , "admin" })
-
You can write this method like:
-
-
Set m_privileges = new HashSet();
public void setPriv(String [] privs) {
for (int i = 0; i < privs.length; i++) {
m_privileges.add(privs[i]);
}
}
-
-
-This example uses a kind-of XW:Interceptors#ModelDriven Action. The action returns a single getter for the User object whose values are populated.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Using Localized Texts in Sitemesh Decorators.html b/docs/chinese/wikidocs/Using Localized Texts in Sitemesh Decorators.html
deleted file mode 100644
index d7a0f48d1..000000000
--- a/docs/chinese/wikidocs/Using Localized Texts in Sitemesh Decorators.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
- WebWork 2 : Using Localized Texts in Sitemesh Decorators
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 02, 2004 by jcarreira .
-
-
- In WebWork 2.1.7 and XWork 1.0.5 support was added for supporting the use of the localization services of WebWork in Sitemesh decorators. In the com.opensymphony.xwork.TextProvider Interface, this method was added:
-
public String getText(String aTextName, String defaultValue, List args, OgnlValueStack stack)
-
and this method was added to com.opensymphony.xwork.util.LocalizedTextUtil which com.opensymphony.xwork.TextProviderSupport (the default TextProvider implementation) calls in the implementation of the above method:
-
public static String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object [] args, OgnlValueStack valueStack)
-
What this does is to use this value stack and the locale in its context if it's there to find the correct text and resolve any variable subsitutions. The problem before was that down in LocalizedTextUtil it was using ActionContext.getContext().getValueStack() to get the value stack and the Locale, so localized texts wouldn't work in Sitemesh decorators. The TextTag automatically uses this form now, and passes in the value stack it gets from the request if it's there. You can also access this form of the method in OGNL expressions like this:
-
<ww:submit value="%{getText('text.search','Search',null ,#request['webwork.valueStack'])}" />
-
-
-
-
-Argument Description
-
-'text.search' the text key to look up
-
-'Search' the default text to use if no localized text is found
-
-null the spot where you could give it a List of arguments to fill in MessageFormat indexed variable substitutions
-
-#request['webwork.valueStack'] gets the value stack from the spot where the ServletDispatcher saves it to make it available to the tags
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 09:55
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Using WebWork Components.html b/docs/chinese/wikidocs/Using WebWork Components.html
deleted file mode 100644
index 463e8a2f2..000000000
--- a/docs/chinese/wikidocs/Using WebWork Components.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
- WebWork 2 : Using WebWork Components
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- A simple example of using WebWork components is available in the webwork-example.war that comes with the WebWork 2.0 Beta 1 distribution. You can download the distribution from https://webwork.dev.java.net/servlets/ProjectDocumentList .
Components are defined _/WEB-INF/classes/components.xml _.The example consists of one component, which is defined by
-
<component>
<scope>session</scope>
<class>com.opensymphony.webwork.example.counter.Counter</class>
<enabler>com.opensymphony.webwork.example.counter.CounterAware</enabler>
</component>
-
com.opensymphony.webwork.example.counter.Counter is just a POJO.
com.opensymphony.webwork.example.counter.CounterAware is an interface which your *Action classes have to implement.
-
-
-
public interface CounterAware {
public void setCounter(Counter counter);
}
-
Additionally, you need to tag your actions with the intercepter, for example,
-
<action name="SimpleCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter" >
<result name="success" type="dispatcher" >
<param name="location" >/success.jsp</param>
</result>
<interceptor-ref name="defaultComponentStack" />
</action>
-
WebWork will call the interface and set the Counter bean . The Counter bean would then be subsequently be available to be used by your *Action classes.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Using WebWork2 and XWork1 with JSP 2.0 and JSTL 1.1.html b/docs/chinese/wikidocs/Using WebWork2 and XWork1 with JSP 2.0 and JSTL 1.1.html
deleted file mode 100644
index 5facd08a4..000000000
--- a/docs/chinese/wikidocs/Using WebWork2 and XWork1 with JSP 2.0 and JSTL 1.1.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
- WebWork 2 : Using WebWork2 and XWork1 with JSP 2.0 and JSTL 1.1
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- WW2/WX1 and its taglib is oriented towards OGNL, which is using a value stack
-for all action properties. These values are not direct available for the
-expression language of JSP2/JSTL1.1.
However, it's easy to populate the request
-attribute set, with all gettable properties of an action object. You need to provide
-an interceptor that does the job, by register a PreResultListener which is
-invoked after the return of Action.execute() but before the rendering of the result .The interceptor below is using Jakarta BeanUtils. It first extracts all getters
-of the current action, invokes them one at the time and stores the values into a map.
-Then it iterates over the map and populates the request attribute set.
-The double iteration is not needed, it's just there for clarity.
-
-
-
package com.whatever.interceptors;
import com.opensymphony.webwork.WebWorkStatics;
import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.AroundInterceptor;
import com.opensymphony.xwork.interceptor.PreResultListener;
import org.apache.commons.beanutils.PropertyUtils;
import javax.servlet.http.HttpServletRequest;
import java.beans.PropertyDescriptor;
import java.util.*;
/**
* Populates HTTP Request Attributes with all gettable properties of the current action.
*/
public class ActionPropertyExportInterceptor extends AroundInterceptor {
protected void before(ActionInvocation invocation) throws Exception {
invocation.addPreResultListener( new PropertyExporter() );
}
protected void after(ActionInvocation dispatcher, String result) throws Exception { }
public static class PropertyExporter implements PreResultListener {
private static final List ignore = Arrays.asList(new String [] {"class" , "texts" });
public void beforeResult(ActionInvocation invocation, String resultCode) {
Map props = extractGetterPropertyValues( invocation.getAction() );
HttpServletRequest request = getRequest(invocation);
for (Iterator it = props.entrySet().iterator(); it.hasNext();) {
Map.Entry e = (Map.Entry) it.next();
request.setAttribute((String ) e.getKey(), e.getValue());
}
}
public Map extractGetterPropertyValues(Object bean) {
PropertyDescriptor[] descr = PropertyUtils.getPropertyDescriptors(bean);
Map props = new HashMap();
for (int i = 0; i < descr.length; i++) {
PropertyDescriptor d = descr[i];
if (d.getReadMethod() == null ) continue ;
if (ignore.contains(d.getName())) continue ;
try {
props.put(d.getName(), PropertyUtils.getProperty(bean, d.getName()));
} catch (Exception e) { }
}
return props;
}
public HttpServletRequest getRequest(ActionInvocation invocation) {
return (HttpServletRequest) invocation.getInvocationContext().get(WebWorkStatics.HTTP_REQUEST);
}
}
}
-
Don't forget to declare the interceptor in your xwork.xml file and insert it
-into your interceptor stack.
-
-
-
<interceptor name="export" class="com.whatever.interceptors.ActionPropertyExportInterceptor" />
. . .
<interceptor-stack name="standard-interceptors" >
<interceptor-ref name="timer" />
<interceptor-ref name="logger" />
<interceptor-ref name="params" />
* <interceptor-ref name="export" />*
<interceptor-ref name="validateParams" />
<interceptor-ref name="awarePlugger" />
</interceptor-stack>
-
Your action need to provide getters for all properties that should be exported into the
-request attribute set.
-
-
-
public class ViewUser extends ActionSupport {
private int id;
private User user;
public String execute() throws Exception {
user = findUser( getId() );
return Action.SUCCESS;
}
public int getId() {return id;}
public void setId(int id) {this .id = id;}
* public User getUser() {return user;}*
private User findUser(int id) {...}
}
-
The User class might look like this
-
-
-
import java.util.Date;
public class User {
private int id;
private String firstName, lastName, email;
private String street, zip, city;
private Date date;
public String getFirstName() {return firstName;}
}
-
Finally, using the samples above you can write your JSP2 page like this.
-
-
-
<%@ taglib prefix="c" uri="http: %>
<%@ taglib prefix="fmt" uri="http: %>
<%@ taglib prefix="fn" uri="http: %>
<html>
<head>
<title>Info about ${user.firstName}</title>
</head>
<body>
<h1>Info about ${user.firstName} ${user.lastName} [OS:ID=${user.id}]</h1>
<table border="1" cellspacing="0" cellpadding="2" width="90%" >
<tr>
<th>Name</th> <td>${user.firstName} ${user.lastName}</td>
</tr>
<tr>
<th>Created</th> <td><fmt:formatDate value="${user.date}" pattern="yyyy-MM-dd HH:mm" /></td>
</tr>
<tr>
<th>Email</th> <td>${user.email}</td>
</tr>
<tr>
<th>Address</th> <td>${user.street} ${user.zip} ${fn:toUpperCase(user.city)}</td>
</tr>
</table>
</body>
</html>
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Validation Examples.html b/docs/chinese/wikidocs/Validation Examples.html
deleted file mode 100644
index 9ed434e0c..000000000
--- a/docs/chinese/wikidocs/Validation Examples.html
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
- WebWork 2 : УÑéʾÀý
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 29, 2004 by jcarreira .
-
-
- ÕâÊǰüº¬ÔÚWW:WebWork ʾÀýwarÎļþÖÐÒ»¸öʹÓÃXWork:УÑé¿ò¼Ü µÄÀý×Ó. Àý×ÓÓÉÈý²¿·Ö×é³É, ʹÓÃÏàͬµÄ»î¶¯ÀàºÍÊÓÍ¼Ò³Ãæ(Velocity).
-
Ê×ÏÈ, ½«validators.xml Îļþ¼ÓÈëµ½Ô´´úÂë¸ù·¾¶ÏÂ
-
-
<validators>
<validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator" />
<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator" />
<validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator" />
<validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator" />
<validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator" />
<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator" />
<validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator" />
<validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator" />
<validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator" />
</validators>
-
±¾ÀýÖÐʹÓõĻÀàÊÇValidatedAction
-
-
package com.opensymphony.webwork.example;
import com.opensymphony.xwork.ActionSupport;
/**
* ValidatedAction
* @author Jason Carreira
* Created Sep 12, 2003 9:23:38 PM
*/
public class ValidatedAction extends ActionSupport {
private ValidatedBean bean = new ValidatedBean();
private String name;
private String validationAction = "basicValidation.action" ;
public ValidatedBean getBean() {
return bean;
}
public void setBean(ValidatedBean bean) {
this .bean = bean;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public String getValidationAction() {
return validationAction;
}
public void setValidationAction(String validationAction) {
this .validationAction = validationAction;
}
}
-
ValidatedActionµÄ»ù±¾Ð£ÑéÎļþÊÇValidatedAction-validation.xml
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="name" >
<field-validator type="requiredstring" >
<message> You must enter a name.</message>
</field-validator>
</field>
</validators>
-
-ËüÓëÆäËüУÑéÎļþ·ÅÖÃÔÚÓëÀàÏàͬµÄĿ¼ÏÂ.»î¶¯µÄ±íµ¥ÊÇvalidationForm.vm
-
-
<html>
<head><title>Webwork Validation Example</title></head>
<body>
#if ( $actionErrors.size() > 0 )
<p>
<font color="red" >
<b>ERRORS:</b><br>
<ul>
#foreach( $error in $actionErrors )
<li>$error</li>
#end
</ul>
</font>
</p>
#end
<p>
<form name="myForm" action="${validationAction}" method="POST" >
<input type="hidden" name="validationAction" value="${validationAction}" />
Action Properties:
<br>
<table>
#tag( TextField "label=Name" "name=name" "value=name" )
</table>
Bean Properties:
#if ( $stack.findValue("fieldErrors" ) )
#set( $beanErrors = $stack.findValue("fieldErrors.get('bean')" ) )
#if ( $beanErrors.size() > 0 )
<br>
<font color="red" >
<b>Bean Errors:</b><br>
<ul>
#foreach( $beanError in $beanErrors )
<li>$beanError</li>
#end
</ul>
</font>
#end
#end
<table>
#tag( TextField "label=Bean.Text" "name=bean.text" "value=bean.text" )<br>
#tag( TextField "label=Bean.Date" "name=bean.date" "value=bean.date" )<br>
#tag( TextField "label=Bean.Number " "name=bean.number" "value=bean.number" )<br>
#tag( TextField "label=Bean.Number2" "name=bean.number2" "value=bean.number2" )<br>
</table>
<input type="submit" value="Test Validation" />
</form>
</body>
-
±¾ÀýµÄ³É¹¦Ò³Ãæ·Ç³£¼òµ¥, valid.vm
-
-
<html>
<head><title>WebWork Validation Test: Valid</title></head>
<body>
Input was valid!
</body>
</html>
-
ºóÃæÎÒÃǽ«Õ¹Ê¾±¾ÀýÖÐÆäËûÅäÖÃÎļþµÄÄÚÈÝ.
-
»ù±¾Ð£Ñé »ù±¾Ð£ÑéÀý×Ó¶¨ÒåÔÚxwork.xml ÖÐ
-
-
<action name="basicValidation" class="com.opensymphony.webwork.example.ValidatedAction" >
<interceptor-ref name="validationWorkflowStack" />
<result name="success" type="dispatcher" > valid.vm</result>
<result name="input" type="dispatcher" > validationForm.vm</result>
<result name="error" type="dispatcher" > validationForm.vm</result>
</action>
-
ÕâÀïinterceptor-ref µÄÖµ"validationWorkflowStack" ¶¨ÒåÔÚwebwork-default.xmlÖÐ, ËüÌṩValidationInterceptor(²Î¼ûXWork:УÑé¿ò¼Ü ºÍDefaultWorkFlowInterceptor(²Î¼ûXWork:DefaultWorkflow )µÄ½ØÈ¡¹¦ÄÜ. ÅäÖÃÎļþÖÐËùÓеIJÎÊý(±¾ÀýÖÐÓÐÒ»¸ö)¶¼´ÓrequestÈ¡³öÉèÖõ½»î¶¯. ½ÓÏÂÀ´, Ö´ÐÐУÑé, ×îºó½«Ö´ÐÐDefaultWorkflow(²Î¼ûXWork:DefaultWorkflow ).
±¾ÀýÊ®·Ö¼òµ¥, ½öʹÓÃÁËÒ»¸öÅäÖÃÎļþValidatedAction-validation.xml. ÕâÒâζ×ÅֻУÑéname×Ö¶ÎÊÇ·ñÊäÈëÄÚÈÝ.
- ·ÃÎÊÕßУÑéʾÀý×¢Òâ: ²é¿´ÁíÒ»¸ö·ÃÎÊÕß×Ö¶ÎУÑéÆ÷ʾÀý .
ValidatedAction °üº¬Ò»¸öÆÕͨJava¶ÔÏóÒýÓÃ, ValidatedBean :
-
-
package com.opensymphony.webwork.example;
import java.util.Date;
/**
* ValidatedBean
* @author Jason Carreira
* Created Sep 12, 2003 9:24:18 PM
*/
public class ValidatedBean {
private String text;
private Date date = new Date(System .currentTimeMillis());
private int number;
private int number2;
public static final int MAX_TOTAL = 12;
public String getText() {
return text;
}
public void setText(String text) {
this .text = text;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this .date = date;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this .number = number;
}
public int getNumber2() {
return number2;
}
public void setNumber2(int number2) {
this .number2 = number2;
}
}
-
ValidatedBeanµÄУÑéÅäÖÃÎļþÊÇValidatedBean-validation.xml
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="text" >
<field-validator type="requiredstring" >
<message key="invalid.text" > Empty Text!</message>
</field-validator>
</field>
<field name="date" >
<field-validator type="date" >
<param name="min" > 01/01/1970</param>
<message key="invalid.date" > Invalid Date!</message>
</field-validator>
</field>
<field name="number" >
<field-validator type="int" >
<param name="min" > 1</param>
<param name="max" > 10</param>
<message key="invalid.number" > Invalid Number!</message>
</field-validator>
</field>
</validators>
-
±¾ÀýÖÐ, Ôö¼ÓÒ»¸öVisitorFieldValidator À´ÊµÏÖ¶ÔValidatedBean µÄУÑé. »î¶¯¶¨ÒåÔÚxwork.xml ÎļþÖÐ:
-
-
<action name="visitorValidation" class="com.opensymphony.webwork.example.ValidatedAction" >
<interceptor-ref name="validationWorkflowStack" />
<param name="validationAction" > visitorValidation.action</param>
<result name="success" > valid.vm</result>
<result name="input" > validationForm.vm</result>
<result name="error" > validationForm.vm</result>
</action>
-
¿ÉÒÔ·¢ÏÖ±¾ÀûÓÚ»ù±¾Ð£ÑéµÄϸ΢²î±ð. »î¶¯Ôö¼ÓÁËÒ»¸ö¾²Ì¬²ÎÊý. ¸Ã²ÎÊýÉèÖÃÁË¶Ô±íµ¥½øÐÐУÑéµÄ»î¶¯(²Î¼ûvalidationForm.vm ).
»î¶¯µÄÃû×Ö, visitorValidation Ó³Éäµ½ÁíÒ»¸öÎļþValidatedAction-visitorValidation-validation.xml ÖеÄУÑé»î¶¯
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="bean" >
<field-validator type="required" >
<message> The bean must not be null.</message>
</field-validator>
<field-validator type="visitor" >
<message> bean: </message>
</field-validator>
</field>
</validators>
-
УÑé¿ò¼Ü½«»ùÓÚÀàÃû(ValidatedAction), »î¶¯±ðÃû(visitorValidation)ºÍ±ê×¼ºó׺(-validation.xml)×é³ÉÎļþÃûValidatedAction-visitorValidation-validation.xml .
¸ÃÎļþΪbean×ֶζ¨ÒåÁËÁ½¸öУÑéÆ÷£º requiredУÑéÆ÷±£Ö¤bean²»Îªnull; VisitorFieldValidator. VisitorFieldValidator½«Ê¹ÓÃValidatedBean µÄУÑéÅäÖò¢Ê¹ÓÃÓëValidatedAction ÏàͬµÄУÑéÉÏÏÂÎÄ(validation context)visitorValidation . Òò´Ë½«Ë³Ðò²éÕÒÎļþValidatedBean-validation.xml (ValidatedBeanµÄȱʡУÑéÎļþ)ºÍValidatedBean-visitorValidation-validation.xml (±¾Ð£ÑéÉÏÏÂÎÄʹÓõÄУÑé).ValidatedBean-validation.xml ÈçÏÂ:
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="text" >
<field-validator type="requiredstring" >
<message key="invalid.text" > Empty Text!</message>
</field-validator>
</field>
<field name="date" >
<field-validator type="date" >
<param name="min" > 01/01/1970</param>
<message key="invalid.date" > Invalid Date!</message>
</field-validator>
</field>
<field name="number" >
<field-validator type="int" >
<param name="min" > 1</param>
<param name="max" > 10</param>
<message key="invalid.number" > Invalid Number!</message>
</field-validator>
</field>
</validators>
-
¸ÃÎļþУÑéÈý¸ö×Ö¶Î(text, date, and number)²¢Î´ËüÃÇÌṩÁËÏûÏ¢. ÏûÏ¢¼üÖµ½«ÓÃÓÚÔÚValidatedBean ÀàÖ¸¶¨µÄ×ÊÔ´ÎļþÖвéÕÒÎı¾. ÓëValidatedBean ÔÚͬһĿ¼ÖÐÎļþÃûΪValidatedBean.properties
-
-
invalid.date=You must enter a date after ${min}.
invalid.text=You must enter some text.
invalid.number=You must enter a number between ${min} and ${max}.
invalid.total=The total of number and number2 must be less than ${@com.opensymphony.webwork.example.ValidatedBean@MAX_TOTAL}.
-
ÕâЩÏûÏ¢½«ÓÃÓÚÈκÎÓëValidatedBean ÓйصĴíÎóÖÐ. ÈçÄãËù¼û, ÏûÏ¢Ìå¿ÉÒÔʹÓÃBean, ½ØÈ¡Æ÷, »î¶¯µÄÊôÐÔ(½«°´ÕÕÕâÑùµÄ˳Ðò½øÐÐËÑË÷)½øÐвÎÊý»¯. ÕâÒ²ÊÇÒ»¸öʹÓþ²Ì¬×ֶεÄÀý×Ó ${@com.opensymphony.webwork.example.ValidatedBean@MAX_TOTAL} .ValidatedBean-visitorValidation-validation.xml Îļþ¶¨ÒåvisitorValidation УÑéÉÏÏÂÎÄϵÄУÑ鹿Ôò, µ«Ëü²¢²»´æÔÚ, Òò´Ë±»ºöÂÔ.
-
´øÓбí´ïʽУÑéÆ÷µÄ·ÃÎÊÕßУÑé ×îºóÒ»¸öÀý×ÓµÄÅäÖÃÓëÉÏÒ»¸öÀý×ÓÀàËÆ. ±¾ÀýµÄxwork.xml ÅäÖúÍvisitorValidation Àý×ÓÖеĺÜÏàËÆ
-
-
<action name="expressionValidation" class="com.opensymphony.webwork.example.ValidatedAction" >
<interceptor-ref name="validationWorkflowStack" />
<param name="validationAction" > expressionValidation.action</param>
<result name="success" > valid.vm</result>
<result name="input" > validationForm.vm</result>
<result name="error" > validationForm.vm</result>
</action>
-
ÎļþValidatedAction-expressionValidation-validation.xml ¶¨Òå¸ÃУÑéÉÏÏÂÎĵļìÑ鹿Ôò:
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="bean" >
<field-validator type="required" >
<message> The bean must not be null.</message>
</field-validator>
<field-validator type="visitor" >
<param name="context" > expression</param>
<message> bean: </message>
</field-validator>
</field>
</validators>
-
Ëü¼¸ºõÓëValidatedAction-visitorValidation-validation.xml ÎļþÒ»Ñù, µ«ËüΪVisitorFieldValidator ´«µÝÁËÒ»¸öcontext²ÎÊý. ±¾ÀýÖÐ, ²»Ê¹ÓÃÓëValidatedAction ÏàͬµÄУÑéÉÏÏÂÎÄ(expressionValidation ), Ëü´«µÝÁËÁíÒ»¸öÉÏÏÂÎÄ(expression ). ±¾ÀýÖÐ, Õë¶ÔValidatedBean µÄУÑéÎļþÒѾ´æÔÚ, Ãû×ÖÊÇValidatedBean-expression-validation.xml
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<validator type="expression" >
<param name="expression" > @com.opensymphony.webwork.example.ValidatedBean@MAX_TOTAL > (number + number2)</param>
<message key="invalid.total" > Invalid total!</message>
</validator>
</validators>
-
-ÕâÔö¼ÓÁËÒ»¸ö¶ÔÏó¼¶±ðµÄ(ÓëÖ®Ïà·´µÄÊÇ×ֶμ¶±ð)ExpressionValidator, ½«numberºÍnumber2×ֶεĺÍÓ뾲̬³£Á¿±È½Ï, Èç¹û×ܺʹóÓÚ³£Á¿½«Ôö¼ÓÒ»¸ö´íÎóÐÅÏ¢.
- VisitorFieldValidator´íÎóÐÅÏ¢×¢ÒâÊÂÏî ʹÓÃVisitorFieldValidator, ÏûÏ¢×Ö¶ÎÃûʹÓöÔÏóµÄ×Ö¶ÎÃû. ±¾ÀýÖÐ, ValidatedBean µÄ×Ö¶Î"text ", "date ", "number "µÄ´íÎóÐÅÏ¢½«Ê¹ÓÃ×Ö¶ÎÃû"bean.text ", "bean.date ", "bean.number ". ×îºóÒ»¸öÀý×ÓÖеĶÔÏó¼¶±ðµÄExpressionValidator²úÉúµÄ´íÎóÐÅÏ¢½«×÷Ϊһ¸ö×ֶμ¶±ðµÄ´íÎóʹÓÃÃû×Ö"bean "Ìí¼Óµ½»î¶¯ÖÐ.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Validation.html b/docs/chinese/wikidocs/Validation.html
deleted file mode 100644
index ba8391e1e..000000000
--- a/docs/chinese/wikidocs/Validation.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
- WebWork 2 : УÑé
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 05, 2004 by plightbo .
-
-
- WebWorkÒÀ¿¿XWork µÄУÑé¿ò¼Ü½«Ó¦ÓõÄÊäÈëУÑ鹿ÔòÓ¦Óõ½»î¶¯ÖÐ. ±¾½Ú½öÌṩºÜÉÙµÄÐÅÏ¢ÈÃÄã¿ÉÒÔÉÏÊÖ²¢È±ÄÚÈݼ¯ÖÐÔÚThis section only provides the bare minimum to get you started and focuses on WebWorkΪ֧³Ö¿Í»§¶ËУÑé¶ø¶ÔXWorkУÑéÆ÷½øÐеÄÀ©Õ¹.
¸ü¶àÐÅÏ¢Çë²ÎÔÄXWorkУÑé¿ò¼ÜÎĵµ . ²Î¿¼ÄÚÈÝ
-
- ¼òµ¥Ð£ÑéÆ÷
- ·ÃÎÊÕßУÑé
- ¿Í»§¶ËУÑé
- ʾÀý
- УÑ鹿Ôò°üº¬ÔÚУÑéÆ÷ÖÐ, Ëü±ØÐëÔÚValidatorFactoryÖÐ×¢²á. ¼òµ¥µÄ°ì·¨ÊÇÔÚ¸ùÀà·¾¶(/WEB-INF/classes)ÖÐÌí¼ÓÎļþvalidators.xml ²¢ÔÚÆäÖÐÉùÃ÷ÄãʹÓõÄÈ«²¿Ð£ÑéÆ÷. ÎļþµÄÓï·¨ÈçÏÂ:
-
-
<validators>
<validator name="required"
class="com.opensymphony.webwork.validators.JavaScriptRequiredFieldValidator" />
<validator name="requiredstring"
class="com.opensymphony.webwork.validators.JavaScriptRequiredStringValidator" />
<validator name="stringlength"
class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator" />
<validator name="int"
class="com.opensymphony.webwork.validators.JavaScriptIntRangeFieldValidator" />
<validator name="date"
class="com.opensymphony.webwork.validators.JavaScriptDateRangeFieldValidator" />
<validator name="expression"
class="com.opensymphony.xwork.validator.validators.ExpressionValidator" />
<validator name="fieldexpression"
class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator" />
<validator name="email"
class="com.opensymphony.webwork.validators.JavaScriptEmailValidator" />
<validator name="url"
class="com.opensymphony.webwork.validators.JavaScriptURLValidator" />
<validator name="visitor"
class="com.opensymphony.xwork.validators.VisitorFieldValidator" />
<validator name="conversion"
class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator" />
</validators>
-
-ÕâÀïÉùÃ÷ÁËWebWork¸½´øµÄÈ«²¿Ð£ÑéÆ÷.¼¤»î¶Ôij»î¶¯Ð£ÑéµÄ·½·¨Êǽ«ValidationInterceptor¼ÓÈë»î¶¯µÄinterceptor-refsÖÐ(²Î¼ûxwork.xml ):
-
-
<interceptor name="validator" class="com.opensymphony.xwork.validator.ValidationInterceptor" />
-
×¢Òâ: ȱʡµÄvalidationWorkflowStack ÒѾ°üº¬¸ÃÀ¹½ØÆ÷.
-
УÑ鹿Ôò¿ÉÒÔÖ¸¶¨¸ø:
-
-
- ÿ¸ö»î¶¯Àà: ÔÚÎļþActionName-validation.xmlÖÐ
- ÿ¸ö»î¶¯±ðÃû: ÔÚÎļþActionName-alias-validation.xmlÖÐ
- »î¶¯ÀàµÄ¼Ì³ÐÁ´»òʵÏֵĽӿÚ: WebWorkËÑË÷»î¶¯ÀàµÄ¼Ì³ÐÊ÷ѰÕÒ¸¸Àà»ò½Ó¿ÚµÄУÑ鹿Ôò
-
-ÏÂÃæÊÇÒ»¸öÀý×ÓSimpleAction-validation.xml:
-
-
-
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="bar" >
<field-validator type="required" >
<message> You must enter a value for bar.</message>
</field-validator>
<field-validator type="int" >
<param name="min" > 6</param>
<param name="max" > 10</param>
<message> bar must be between ${min} and ${max}, current value is ${bar}.</message>
</field-validator>
</field>
<field name="date" >
<field-validator type="date" >
<param name="min" > 12/22/2002</param>
<param name="max" > 12/25/2002</param>
<message> The date must be between 12-22-2002 and 12-25-2002.</message>
</field-validator>
</field>
<field name="foo" >
<field-validator type="int" >
<param name="min" > 0</param>
<param name="max" > 100</param>
<message key="foo.range" > Could not find foo.range!</message>
</field-validator>
</field>
<validator type="expression" >
<param name="expression" > foo > bar</param>
<message> Foo must be greater than Bar. Foo = ${foo}, Bar = ${bar}.</message>
</validator>
</validators>
-
ÕâÀïÊÇSimpleActionÀàµÄУÑéÎļþ. Validators(ºÍfield-validators)ÔªËØ±ØÐë¾ß±¸type ÊôÐÔ, ËüÒýÓÃValidatorFactoryÖÐ×¢²áµÄÒ»¸öУÑéÆ÷µÄÃû×Ö. ValidatorÔªËØÒ²¿ÉÒÔ°üº¬<param>ÔªËØ, ʹÓÃnameºÍvalueÊôÐÔ½«²ÎÊýÉèÖõ½Ð£ÑéÆ÷ʵÀýÖÐ. ÏÂÎÄÊǶÔmessageÔªËØµÄÌÖÂÛ.
ÿ¸öValidator»òField-ValidatorÔªËØ±ØÐ趨ÒåÒ»¸ömessageÔªËØ. messageÔªËØÓÐÒ»¸öÊôÐÔ"key", Ëü²»ÊDZØÐèµÄ. Èç¹ûУÑéʧ°Ü, messageÔªËØµÄÕýÎÄ(body)½«×÷ΪĬÈÏÏûÏ¢¼Óµ½»î¶¯ÖÐ."key"ÊôÐÔ¶¨ÒåÁËÏûÏ¢µÄ¼üÖµ, Èç¹û»î¶¯ÊµÏÖÁËLocaleAware½Ó¿Ú(ActionSupportÀàÒѾʵÏÖÁËÕâÒ»½Ó¿Ú), ½«ÔڻµÄ×ÊÔ´°üÖÐʹÓÃgetText()·½·¨²éÕÒÏàÓ¦µÄÏûÏ¢ÄÚÈÝ. ÕâÌṩÁ˸ù¾ÝÓû§ÇëÇóµÄÇøÓòÉèÖÃ(»òÈκÎÉèÖõ½LocaleAware»î¶¯ÖеÄÇøÓò)Ñ¡Ôñ¶ÔÓ¦µÄÇøÓò»¯ÏûÏ¢µÄÄÜÁ¦.
ÔÚʹÓÃkey´Ó×ÊÔ´°üÖлñÈ¡ÏûÏ¢»òÖ±½ÓµÃµ½Ä¬ÈÏÏûÏ¢Ö®ºó, µ±Ç°Ð£ÑéÆ÷±»Ñ¹ÈëÖµÕ», È»ºó½«¶ÔÏûÏ¢½øÐнâÎö, ½«${...}²¿·ÖÓÃ${ºÍ}Ö®¼äµÄ×Ö·û´®µÄ¸³Öµ½á¹û½øÐÐÌæ»». ¿ÉÒÔʹÓÃУÑéÆ÷ºÍ»î¶¯¶ÔÏóÀ´¶¨Òå²ÎÊý»¯ÏûÏ¢. ÏÂÃæÊDzÎÊý»¯ÏûÏ¢µÄÀý×Ó:
-
-
-
bar must be between ${min} and ${max}, current value is ${bar}.
-
Ëü½«´ÓIntRangeFieldValidatorÖÐÈ¡³öminºÍmax²ÎÊý, ´Ó»î¶¯ÖÐÈ¡³öbarµÄÖµ.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:36
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Value Stack Internals.html b/docs/chinese/wikidocs/Value Stack Internals.html
deleted file mode 100644
index 3e3b74d3f..000000000
--- a/docs/chinese/wikidocs/Value Stack Internals.html
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
- WebWork 2 : Value Stack Internals
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
- As Matt Ho explained on the mailing list:
-
- A value stack is essentially a List. Calling [1] on the stack,
- returns a substack beginning with the element at index 1. It's only
- when you call methods on the stack that your actual objects will be
- called.
Said another way, let's say I have a value stack that consists of a
- model and an action as follows:[ model, action ]
here's how the following ognl would resolve:[0] - a CompoundRoot object that contains our stack, [model, action]
[1] - another CompoundRoot that contains only [action][0].toString() - calls toString() on the first object in the value
- stack (excluding the CompoundRoot) that supports the toString() method
[1].foo - call getFoo() on the first object in the value stack
- starting from [OS:action] and excluding the CompoundRoot that supports a
- getFoo() methodI hope this doesn't sound too confusing :\
If you're using Velocity, this can most easily be written as:$stack.findValue("[0]").peek()
Unfortunately, <ww:property value="[0].peek()"/> won't work as this
- would translate into "starting at the top of the value stack (and
- excluding the CompoundRoot), find the first object that has a method
- called peek()"--------thanks Matt!
here is the com.opensymphony.xwork.util.CompoundRoot class which Matt mentions:
-
-
-
public class CompoundRoot extends ArrayList {
public CompoundRoot() {
}
public CompoundRoot(List list) {
super (list);
}
public CompoundRoot cutStack(int index) {
return new CompoundRoot(subList(index, size()));
}
public Object peek() {
return get(0);
}
public Object pop() {
return remove(0);
}
public void push(Object o) {
add(0, o);
}
}
-
-
-WebWork2 contains the following items by default in the ValueStack:
-
-
- req - the current HttpServletRequest
- res - the current HttpServletResponse
- stack - the current OgnlValueStack
- ognl - an instance of OgnlTool
- ui - a (now deprecated) instance of a ui tag renderer
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Velocity Result.html b/docs/chinese/wikidocs/Velocity Result.html
deleted file mode 100644
index 1c0aa195e..000000000
--- a/docs/chinese/wikidocs/Velocity Result.html
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
- WebWork 2 : Velocity Result
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 13, 2004 by casey .
-
-
-
¸Ã½á¹ûÄ£ÄâJSPÔËÐл·¾³, ÏÔʾVelocityÄ£°æ½á¹û²¢Ö±½ÓÊä³öµ½servletÊä³öÁ÷.
-
-²ÎÊý ±ØÐè ÃèÊö
-
- location ÊÇ Ö´ÐкóÌø×ªµÄλÖÃ
-
- parse ·ñ ȱʡΪtrue. Èç¹ûÉèΪfalse, location²ÎÊý½«²»×÷ΪOgnl±í´ïʽ½øÐнâÎö
-
-
-
-
<result name="success" type="velocity" >
<param name="location" > foo.vm</param>
</result>
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/Visitor validation.html b/docs/chinese/wikidocs/Visitor validation.html
deleted file mode 100644
index a72ace4ad..000000000
--- a/docs/chinese/wikidocs/Visitor validation.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- WebWork 2 : Visitor validation
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jul 10, 2004 by unkyaku .
-
-
- VisitorFieldValidatorÔÊÐí½«Ð£Ñé×ªÒÆ¸ø»î¶¯µÄÊôÐÔ²¢Ê¹ÓÃËü×Ô¼ºµÄУÑéÎļþ. This allows you to use the ModelDriven development pattern and manage your validations for your models in one place, where they belong, next to your model classes. The VisitorFieldValidator can handle either simple Object properties, Collections of Objects, or Arrays. See XW:Standard Validators#VisitorFieldValidator
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/VisitorFieldValidatorExample.html b/docs/chinese/wikidocs/VisitorFieldValidatorExample.html
deleted file mode 100644
index d87eaee28..000000000
--- a/docs/chinese/wikidocs/VisitorFieldValidatorExample.html
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
- WebWork 2 : VisitorFieldValidatorExample
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 29, 2004 by jcarreira .
-
-
- I've been using the validator in webwork and have found myself duplicating a few of the validations throughout the app, so after asking a few questions I was told what to do.
basically I have a creation form to create a Car, and then I have another to Edit and Update the Car, I wanted to create just one validation file that would validate that Car, I was using 2 validation files, CreateCarAction-validation.xml and UpdateCarAction-validation.xml and both were identical.what I had to do was:
first i had to expose the Car object in my action, then I had to create a validation file for the action, and placed this file in the same package as the CarAction in this example;CarAction-validation.xml
-
-
<!DOCTYPE validators PUBLIC "- "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="car" >
<field-validator type="visitor" >
<message>Car Visitor: </message>
</field-validator>
</field>
</validators>
-
next I had to create Car-validation.xml file and put this file in the same package as the Car classCar-validation.xml
-
-
<!DOCTYPE validators PUBLIC "- "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd" >
<validators>
<field name="name" >
<field-validator type="requiredstring" >
<message>Name is REQUIRED</message>
</field-validator>
</field>
<field name="model" >
<field-validator type="requiredstring" >
<message>Model is REQUIRED</message>
</field-validator>
</field>
</validators>
-
so now if the input strings car.model and car.name are empty you should get fieldErrors added to the car.name and car.model fields, you just need to make sure that in your action you expose the Car object.heres the CarAction.java file:
-
-
public class CarAction extends ActionSupport {
private Car car = new Car();
public Car getCar() {
return car;
}
public void setCar(Car car) {
this .car = car;
}
public String execute() {
return SUCCESS;
}
}
-
-heres my Car bean:
-
-
public class Car {
private String name;
private String model;
public Car() {}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this .id = id;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this .model = model;
}
}
-
-and then the car.vm file:
-
-
<form method="get" >
<table border="1" align="center" >
#tag( TextField "label=Car ID" "name=car.id" "value=car.id" )
#tag( TextField "label=Car Name" "name=car.name" "value=car.name" )
#tag( TextField "label=Car Model" "name=car.model" "value=car.model" )
#tag( Submit "value='Submit Car'" "align=center" )
</table>
</form>
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/WebFlow.html b/docs/chinese/wikidocs/WebFlow.html
deleted file mode 100644
index 25a9b9935..000000000
--- a/docs/chinese/wikidocs/WebFlow.html
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
- WebWork 2 : WebFlow
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 14, 2004 by plightbo .
-
-
- WebWork¸½´øÒ»¸öÃûΪWebFlowµÄ¹¤¾ß. WebFlowÓÃÓÚÉú³ÉWebÓ¦ÓóÌÐòµÄÁ÷³Ìͼ. Ëüͨ¹ý½âÎöÅäÖÃÎļþ, »î¶¯Àà, ºÍÊÓͼ(JSPºÍVelocity)Îļþ´ïµ½Ä¿µÄ.
ʹÓÃÏÂÃæµÄÃüÁî:
-
java -cp … -jar webflow.jar -config CONFIG_DIR -views VIEWS_DIRS -output OUTPUT
ÔÚÕâÀï:
-
- CONFIG_DIRÊÇxwork.xmlºÍÆäËûÅäÖÃÎļþËùÔÚµÄĿ¼
- VIEWS_DIRSÊÇÓöººÅ·Ö¸ôµÄ´æ·ÅJSPºÍVelocityÎļþµÄĿ¼Áбí
- OUTPUTÊÇWebFlowÎļþµÄÊä³öĿ¼
-
-
-
-
-
×¢Òâ: µ÷ÓÃWebFlow¹¤¾ßÊDZØÐëÌṩÕýÈ·µÄÀà·¾¶. ÓÈÆäÊÇXWork, WebWork, ºÍËûÃǵÄÖ§³ÖÀà¿â±ØÐëÔÚÀà·¾¶ÖÐ. ͬʱ, »¹±ØÐë°üº¬xwork.xmlÖÐÒýÓõĻÀàÎļþ . ûÓÐÕýÈ·µÄÀà·¾¶, WebFlow¾Í²»ÄÜÕýÈ·¹¤×÷.
-
-WebFlowÊä³öµÄÎļþʹÓÃÀ©Õ¹Ãû"dot". ÎļþʹÓÃGraphViz ¹¤¾ß. Ò»µ©WebFlowÉú³ÉÁËdotÎļþ, ¾Í¿ÉÒÔÓÃdot³ÌÐòÀ´»æÖưüº¬Õ¾µãµØÍ¼µÄGIFÎļþ.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/WebLogic.html b/docs/chinese/wikidocs/WebLogic.html
deleted file mode 100644
index 7af2ea0ce..000000000
--- a/docs/chinese/wikidocs/WebLogic.html
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
- WebWork 2 : WebLogic
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 20, 2004 by mcampbell .
-
-
-
-
> The classloaders of WLS seem not to play nice with velocity when
-> deploying this way.
->
-> If you haven't already tried, do the following, it makes it all work
-> for us:
->
-> 1) In the webwork.properties file (which should be in your
-> WEB-INF/classes directory) put a line like this:
->
-> webwork.velocity.configfile = my-velocity.properties
->
-> 2) create a "my-velocity.properties" file under WEB-INF/classes and
-> put into it the contents of the velocity.properties file that is in
-> webwork's velocity-dep.jar
->
-> 3) in your new "my-velocity.properties" file, find the section titled
-> "T E M P L A T E L O A D E R S", and change this section to look like
-> this:
->
-> ===========================================
-> resource.loader = class
->
-> file.resource.loader.description = Velocity File Resource Loader
-> file.resource.loader.class =
-> org.apache.velocity.runtime.resource.loader.FileResourceLoader
-> file.resource.loader.path = .
-> file.resource.loader.cache = false
-> file.resource.loader.modificationCheckInterval = 2
->
-> class.resource.loader.class =
-> org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-> class.resource.loader.cache = true
-> ===========================================
->
-> … which straightens out the class resource loading problems (for us
-> at least).
->
-> hope this helps,
-> james
-
Note: The "when deploying this way" comment above refers to deploying a war file (not expanded) into the deployment directory of WebLogic; with WL 8.x, this is typically at <bea_home>/user_projects/domains/mydomain/.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/WebWork 2 UI Tag Guide.html b/docs/chinese/wikidocs/WebWork 2 UI Tag Guide.html
deleted file mode 100644
index 8c3793f08..000000000
--- a/docs/chinese/wikidocs/WebWork 2 UI Tag Guide.html
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
- WebWork 2 : WebWork 2 UI±êǩָÄÏ
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
- [±¾ÎĵµÄÚÈÝÓëÄ£°æ ÄÚÈÝÖØ¸´, ²»×ö·Òë ]
-
In WebWork 2, the UI tags wrap generic HTML controls while providing tight integration with the core framework. The tags have been designed to minimize the amount of logic in compiled code and delegate the actual rendering of HTML to a template system. The UI tags attempt to cover the most common scenarios, while providing a Component Tag for creating custom components. The UI tags also provide built-in support for displaying inline error messages.
-WebWork 2 uses the Velocity template system to render the actual HTML output for all UI tags. A default implementation of all templates has been included with the core distribution allowing users to use WebWork's UI tags "out of the box". Templates can be edited individually or replaced entirely allowing for complete customization of the resulting HTML output. In addition, the default template can be overridden on a per tag basis allowing for a very fine level of control. The default templates are located in the webwork-2.0.jar file under /decorators/xhtml.
Update (2003-11-13): It is now found in /template/xhtmlNote: This is going to change with the theme support that was added.
The AbstractUI class is the base class that other UI tags extend. It provides a set of attributes that are common across UI components. There are 3 attributes that determine which template is rendered:
-
-
- templateDir (defaults to webwork.ui.templateDir - /template/)
- theme (defaults to webwork.ui.theme - xhtml)
- templateName (default is tag dependent, subclasses must implement getDefaultTemplate() to provide this)
-
-These 3 attributes combine to determine the location of the template: templateDir + theme + templateName. For example, the default template for the select tag is "/template/xhtml/select.vm". Any one of these attributes can be overridden by the user at run time. The AbstractUI class is responsible for loading the correct template. As part of the doStartTag() method, a VelocityContext object is created with the following items:
- tag - a reference to the tag object
- stack - the ValueStack
- ognl - a reference to the utility class OgnlTool
- req - a reference to the HttpServletRequest object
-
-These variables can be accessed in the template by using $TAG_NAME where TAG_NAME is one of tag, stack, ognl or req. The template file is then processed.
-
The default templates provided with WebWork define two properties for use with CSS. The first property, 'label', is applied to text specified in a label attribute in a JspTag. The second property, 'errorMessage', is applied when displaying inline error messages. Many developers need to highlight error messages more prominently by using an alternative color. The code block below can be used in an external stylesheet or in a style element to display error messages in red.
-
-
-
.errorMessage {
color: red;
}
-
Note: A default stylesheet is not provided with the core distribution. Users are encouraged to define their own stylesheet using the properties WebWork exposes or modify the supplied templates to work with an existing stylesheet.
Validation and error handling are an integrated part of the core framework. The UI tags extend this by providing built-in support for displaying inline error messages. To use this functionality, just have your actions implement the ValidationAware interface or extend the ActionSupport class. The ActionSupport class provides a default implementation of ValidationAware and also provides support for internationalization. UI tags that support displaying error messages include: Component Tag, Password Tag, Radio Tag, Select Tag, Textarea Tag and Textfield Tag.
A very simple example of validation is included below. The key point to understand is how to add an error message to a specific control. WebWork will display the specified message inline with the form element.Users are encouraged to take a closer look at the validation framework in XWork. It provides a number of benefits including separating validation code from your action class, declaring rules based on field type, and providing different validation rules for each action alias. The XWork validation framework is based on an interceptor allowing validation to be added or removed from an action with a quick configuration file change. For more information see the XW:Validation Framework .
Action class:
-
import com.opensymphony.xwork.ActionSupport;
public class RegisterEmail extends ActionSupport {
private String email;
public void setEmail(String email) {
this .email = email;
}
public String getEmail() {
return email;
}
public String execute() throws Exception {
if (email == null || email.equals("")) {
addFieldError(" email", " Email address is required.");
}
if (hasErrors()) {
return ERROR;
} else {
return SUCCESS;
}
}
}
-
Jsp page:
-
<%@ taglib uri="webwork" prefix="ui" %>
<html>
<head><title>validation example</title></head>
<style type="text/css" >
.errorMessage {
color: red;
}
</style>
<body>
<form name="frmRegister" action="RegisterEmail.action" method="POST" >
<table>
<ui:textfield label="Email" name="email" value="" size=" 50" />
<tr>
<td colspan=" 2">
<input type=" submit" name=" submit" value=" Register" />
</td>
</tr>
</table>
</form>
</body>
</html>
-
HTML output (before submitting):
-
<html>
<head><title>validation example</title></head>
<style type="text/css" >
.errorMessage {
color: red;
}
</style>
<body>
<form name="frmRegister" method="POST" action="RegisterEmail.action" >
<table>
<tr>
<td align="right" valign="top" ><span class="label" >Email:</span></td>
<td>
<input type="text" name="email" value="" size=" 50"/>
</td>
</tr>
<tr>
<td colspan=" 2">
<input type=" submit" name=" submit" value=" Register" />
</td>
</tr>
</table>
</form>
</body>
</html>
-
HTML output (after submitting):
-
-
<html>
<head><title>validation example</title></head>
<style type="text/css" >
.errorMessage {
color: red;
}
</style>
<body>
<form name="frmRegister" method="POST" action="RegisterEmail.action" >
<table>
<tr>
<td colspan="2" ><span class="errorMessage" >
Email address is required.
</span></td>
</tr>
<tr>
<td align="right" valign="top" ><span class="label" >Email:</span></td>
<td>
<input type="text" name="email" value="" size=" 50"/>
</td>
</tr>
<tr>
<td colspan=" 2">
<input type=" submit" name=" submit" value=" Register" />
</td>
</tr>
</table>
</form>
</body>
</html>
-
-Add the following to the JSP file above the form tag:
-
<ww:if test="hasErrors()" >
<p> <span class="errorMessage" >
<ww:if test="hasActionErrors()" >
<b> Errors:</b> <br>
<ul>
<ww:iterator value="actionErrors" >
<li> <ww:property/> </li>
</ww:iterator>
</ul>
</ww:if> <ww:else>
<b> Please fix the errors marked in red to continue</b>
</ww:else>
</span> </p>
</ww:if>
-
This will display any action errors that may have occured.
At first glance the component tag doesn't look that impressive. The ability to specify a single template and use a number of predetermined attributes looks rather lacking. But the supplied tag offers a number of benefits to developers.
Before diving right into the custom component, first I will identify some advantages to using the component tag to create your components. Then I will detail the two types of error messages in WebWork 2 and how our custom component (for displaying one of these types) fits into the equation. Finally, I will present a sample Action class, Jsp file and template file for our component. When we are finished, you will be able to incorporate the new component into your application.Why use the component tag?
-
- removes the need to develop your own Jsp tag library
- provides integrated support for accessing the ValueStack
- leverages XWork's support for internationalization, localization and error handling
- faster prototyping using templates (editable text files) instead of compiled code
- re-use and combine existing templates
-
-More on error message support:In WebWork 2, there are two types of error messages: field error messages and action error messages. Field error messages are used to indicate a problem with a specific control and are displayed inline with the control. A number of tags provide built-in support for displaying these types of messages. Action error messages on the other hand, indicate a problem with executing an action. Many things can go wrong in a web application, especially an application that relies on external resources such as a database, remote web service, or other resource that might not be accessible during the execution of an action. Handling an error gracefully and presenting the user with a useful message can often be the difference in a positive user/customer experience and a bad one. When these types of errors occur, it is more appropriate to display these messages separate from individual controls on the form. In the example below, we will create a custom component that can be used to display action error messages in a bulletted list. This component can then be used on all your forms to display these error messages.
The action class below was created to handle a promotion on the website: a free e-certificate. It will try to email the certificate, but an exception will be thrown.Action class:
-
package example;
import com.opensymphony.xwork.ActionSupport;
public class AddUser extends ActionSupport {
private String fullname;
private String email;
public String execute() throws Exception {
try {
MailUtil.sendCertificate(email, fullname);
} catch (Exception ex) {
addActionError("We are experiencing a technical problem and have contacted our support staff. " +
"Please try again later." );
}
if (hasErrors()) {
return ERROR;
} else {
return SUCCESS;
}
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this .fullname = fullname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this .email = email;
}
}
-
Jsp page:
-
<%@ taglib uri="webwork" prefix="ui" %>
<html>
<head><title>custom component example</title></head>
<style type="text/css" >
.errorMessage {
color: red;
}
</style>
<body>
<ui:form action="AddUser.action" method="POST" >
<table>
<ui:component template="action-errors.vm" />
<ui:textfield label="Full Name" name="fullname" />
<ui:textfield label="Email" name="email" />
<ui:submit name="submit" value="Send me a free E-Certificate!" />
</table>
</ui:form>
</body>
</html>
-
HTML output (before submitting):
-
<html>
<head><title>custom component example</title></head>
<style type="text/css" >
.errorMessage {
color: red;
}
</style>
<body>
<form action="AddUser.action" method="POST" />
<table>
<tr>
<td align="right" valign="top" ><span class="label" >Full Name:</span></td>
<td>
<input type="text" name="fullname" value="" />
</td>
</tr>
<tr>
<td align=" right" valign=" top"><span class=" label">Email:</span></td>
<td>
<input type=" text" name=" email" value=" " />
</td>
</tr>
<tr>
<td colspan=" 2">
<div align=" right">
<input type=" submit" name=" submit" value=" Send me a free E-Certificate!"/>
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
-
The template below will loop through any action errors and display them to the user in a bulletted list.
Template (action-errors.vm)
-
-
-
#set ($actionErrors = $stack.findValue("actionErrors" ))
#if ($actionErrors)
<tr>
<td colspan="2" >
<span class="errorMessage" >The following errors occurred:</span>
<ul>
#foreach ($actionError in $actionErrors)
<li><span class="errorMessage" >$actionError</span></li>
#end
</ul>
</td>
</tr>
#end
-
HTML output (after submitting):
-
<html>
<head><title>custom component example</title></head>
<style type="text/css" >
.errorMessage {
color: red;
}
</style>
<body>
<form action="AddUser.action" method="POST" />
<table>
<tr>
<td colspan="2" >
<span class="errorMessage" >The following errors occurred:</span>
<ul>
<li class="errorMessage" >
We are experiencing a technical problem and have contacted our
support staff. Please try again later.
</li>
</ul>
</td>
</tr>
<tr>
<td align="right" valign="top" ><span class="label" >Full Name:</span></td>
<td>
<input type="text" name="fullname" value="Sample User" />
</td>
</tr>
<tr>
<td align="right" valign="top" ><span class="label" >Email:</span></td>
<td>
<input type="text" name="email" value="user@example.com" />
</td>
</tr>
<tr>
<td colspan="2" >
<div align="right" >
<input type="submit" name="submit" value="Send me a free E-Certificate!" />
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
-
-TODO
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/WebWork 2.1.7.html b/docs/chinese/wikidocs/WebWork 2.1.7.html
deleted file mode 100644
index 5fec45ff7..000000000
--- a/docs/chinese/wikidocs/WebWork 2.1.7.html
+++ /dev/null
@@ -1,384 +0,0 @@
-
-
- WebWork 2 : WebWork 2.1.7
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
-
-
- XWork upgraded to 1.0.5
- Using i18n, especially the ww:text tag, is now possible in SiteMesh decorators. See SiteMesh .
- Issues where the ActionContext wasn't properly cleaned up (after ww:include and ww:action) have been resolved.
- Configuration
- If the action class is not specified, it now defaults to com.opensymphony.xwork.ActionSupport.
- If the result name is not specified, it is assumed to be "success".
-
-
- Non-UI tags
- ww:text and ww:url have an id attribute that, when specified, causes the tag not to print out the localized text but rather store the result in the ActionContext to be referenced later. See SiteMesh , URL tag , and Text Tag .
-
- UI tags
- ww:form has an added target attribute.
- ww:form exposes "namespace" in the parameters Map in templates.
- ww:form tag defaults the id and name attribute to the action name that it is submitting to.
- Form elements default the id attribute to "[formId]_[elementName]".
- Form elements default the "required" attribute to true if there is any validator associated with that field and the form's validate attribute is enabled.
- ww:textarea has an added "wrap" attribute.
- XHTML theme: added a parameter called "after" and that will add text to the right of the form element.
-
- Replaced old prototype client-side validation with XmlHttpRequest-based solution (STILL IN PROTOTYPE PHASE, works in XHTML theme only).
- Interceptors
- ServletConfigInterceptor now checks for actions implementing PrincipalAware and adds a Principal that ties in to the HttpServletRequest's Principal.
- Minor bug fixes in the ExecuteAndWaitInterceptor and FileUploadInterceptor.
-
- Results
- JasperReportsResult and StreamResult both support the Content-disposition header.
- JasperReports integration has been upgraded to 0.6.3.
- WebWorkResultSupport has a simple conditionalParse() method making support for ${} notation in your results easier (it will parse only if the parse attribute is true).
-
-
-
-
- Copy over the new webwork.jar and xwork.jar files.
- If you are using JasperReports, you will need to upgrade to the latest JasperReports jars of 0.6.3 because the package name has changed.
- Read the migration notes for anything that you should be aware of.
-
-
-
- If you were using the old client-side validation code, it is still possible to keep using it but you will likely need to modify form-close.vm and controlheader.vm in the XHTML theme and form.vm in the simple theme. We recommend supporting the new prototype as it is a lot easier to use and doesn't require special validators.
- It is possible, though very unlikely, that the default ids for the UI tags and the default name for the form tag might cause you some trouble. Please be aware of this change.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/WebWork Community.html b/docs/chinese/wikidocs/WebWork Community.html
deleted file mode 100644
index 3332a22e8..000000000
--- a/docs/chinese/wikidocs/WebWork Community.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
- WebWork 2 : WebWorkÍÅÌå
-
-
-
-
-
-
-
-
-
-
- This page last changed on Jun 17, 2004 by casey .
-
-
- WebWork(WW)ÍÅÌåÓÉÓû§, ¿ª·¢ÕߺÍÅÔ¹ÛÕß¹¹³É. ÔÚʹWebWork³É¹¦µÄ¹ý³ÌÖÐ, ÿһ¸ö½ÇÉ«¶¼Ê®·ÖÖØÒª. Óû§Ã¿ÌìʹÓÿò¼Ü²¢Ìṩ¿ÉÓÃÐÔ·½ÃæµÄÓмÛÖµµÄ·´À¡, ȱÏݺÍÌØÐÔ. ¿ª·¢Õß¹±Ï×ËûÃǵÄʱ¼äÀ´±àд¿É¹©ÆäËûÈËʹÓõĿò¼Ü. ÅÔ¹ÛÕßÇåÎúµÄ²é¿´Õû¸ö¹¤×÷, ËûÃÇÖеÄһЩÈË¿ÉÄÜ»áºÜ¿ì³ÉΪÓû§»ò¿ª·¢Õß.
Õâ¾äÒý×Ôhttp://opensource.org µÄ»°×îºÃµØ²ûÊöÁËÎÒÃÇΪʲôÀË·Ñ×Ô¼ºµÄʱ¼äΪÃâ·ÑÈí¼þ¹¤×÷.
"The basic idea behind open source is very simple: When programmers can read, redistribute, and modify the source code for a piece of software, the software evolves. People improve it, people adapt it, people fix bugs. And this can happen at a speed that, if one is used to the slow pace of conventional software development, seems astonishing.""We in the open source community have learned that this rapid evolutionary process produces better software than the traditional closed model, in which only a very few programmers can see the source and everybody else must blindly use an opaque block of bits."
- "¿ª·ÅÔ´´úÂëµÄ»ù±¾Ïë·¨·Ç³£¼òµ¥: µ±³ÌÐòÔ±¿ÉÒÔÔĶÁ, ÖØÐ·¢²¼, ÐÞ¸ÄÈí¼þµÄÔ´´úÂëʱ, Èí¼þ×ÔÉíµÃµ½½ø»¯. ÈËÃǸĽøËü, ÈËÃǸıàËü, ÈËÃÇÐÞÕýȱÏÝ. Óë³£¹æµÄÈí¼þ¿ª·¢Ïà±È½Ï, ÕâÒ»ÇÐÒÔ¾ªÈ˵ÄËٶȽøÐÐ×Å.""ÔÚ¿ª·ÅÔ´´úÂëÍÅÌåÖÐÎÒÃÇÒѾ֪µÀÕâ¸ö¸ßËÙ½ø»¯¹ý³ÌÓ봫ͳµÄ·â±ÕģʽÏà±ÈÄÜÉú³É³ö¸üºÃµÄÈí¼þ,ÄÇÖÖģʽÖÐÖ»ÓÐÉÙÊý³ÌÐòÔ±¿ÉÒÔ¿´µ½´úÂë¶øÆäËûÈËÖ»ÄÜÏñäÈËÒ»ÑùʹÓò»Í¸Ã÷µÄ×Ö½Ú¿é."
- ÈÏʶΪWebworkºÍOpen Symphony×ö³ö¹±Ï×µÄÍŶÓ
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/WebWork Freemarker Support.html b/docs/chinese/wikidocs/WebWork Freemarker Support.html
deleted file mode 100644
index 8b8f9be4a..000000000
--- a/docs/chinese/wikidocs/WebWork Freemarker Support.html
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
- WebWork 2 : WebWork Freemarker Support
-
-
-
-
-
-
-
-
-
-
- This page last changed on Nov 30, 2004 by jcarreira .
-
-
-
Freemarker views can be rendered either via the webwork result type freemarker , or by using the dispatcher result type in conjunction Webwork's FreemarkerServlet.This document will focus on using the freemarker result since it is the recommended approach. An section follows to show how to use the FreemarkerServlet.
The freemarker result type is defined in webwork-default.xml , so normally you just include it, and define your resutls to use type="freemarker" .
-
<include file="webwork-default.xml" />
...
<action name="test" class="package.Test" >
<result name="success" type="freemarker" > /WEB-INF/views/testView.ftl</result>
</action>
...
-
-
-
Your action properties are automatically resolved - just like in a velocity view. for example ${name} will result in stack.findValue("name") , which generaly results in action.getName() being executed.
A search process is used to resolve the variable, searching the following scopes in order, until a value is found :
-
- freemarker variables
- value stack
- request attributes
- session attributes
- servlet context attributes
-
-The following variables exist in the freemarer views
- req - the current HttpServletRequest
- res - the current HttpServletResponse
- stack - the current OgnlValueStack
- ognl - the OgnlTool instance
- This class contains useful methods to execute OGNL expressions against arbitary objects, and a method to generate a select list using the <ww:select> pattern. (i.e. taking the name of the list property, a listKey and listValue)
-
- webwork - an instance of FreemarkerWebWorkUtil
- action - the current WebWork action
- exception - optional the Exception instance, if the view is a JSP exception or Servlet exception view
-
-
To configure the freemarker engine that webwork uses, just add a file freemarker.properties to the classpath. The supported properties are those that the freemarker Configuration object expects - see the freemarker documentation for these. These properties are used for both the freemarker result type, and the webwork provided FreemarkerServlet.
-
-
-
default_encoding=ISO-8859-1
template_update_delay=5
locale=no_NO
-
-
Freemarker has builtin support for using any JSP taglib. You can use JSP taglibs in FreeMarker even if
-a) your servlet container has no support for JSP, or
-b) you didn't specify the taglib in your web.xml - note how in the example below we refer to the taglib by its webapp-absolute URL, so no configuration in web.xml is needed.
-
-
-
<#assign ww=JspTaglibs["/WEB-INF/webwork.tld" ] />
<@ww.form method="'post'" name="'inputform'" action="'save.action'" >
<@ww.hidden name="'id'" />
<@ww.textarea label="'Details'" name="'details'" rows=5 cols=40 />
<@ww.submit value="'Save'" align="center" />
</@ww.form>
-
NOTE : numeric properties for tags MUST be numbers, not strings. as in the rows and cols properties above. if you use cols="40" you will receive an exception. Other than that, the freemarker tag container behaves as you would expect.
The FreemarkerServlet provided in the freemarker.jar will work out of the box however it won't provide any webwork specific functionality such as the context variables, property resoloution etc. Therefore webwork provides its own servlet to provide this integration.
To use freemarker as a view engine, the webwork2 FreemarkerServlet needs to be configured, and mapped to the file extension that you use for your templates.
-
<servlet>
<servlet-name> freemarker</servlet-name>
<servlet-class> com.opensymphony.webwork.views.freemarker.FreemarkerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> freemarker</servlet-name>
<url-pattern> *.ftl</url-pattern>
</servlet-mapping>
-
To use the freemarker view, just use the dispatcher result type, and specify the location to the template file.
-
-
-
<action name="test" class="package.Test" >
<result name="success" type="dispatcher" > /WEB-INF/views/testView.ftl</result>
</action>
-
NOTE: these docs need to be revised, since the FreemarkerServlet has changed since they were written.Please refer to the freemarker site for details about the base freemarker servlet.
Be carfeul when subclassing com.opensymphony.webwork.views.freemarker.FreemarkerServlet when overriding
-
-
-
protected TemplateModel createModel(
ObjectWrapper wrapper,
ServletContext servletContext,
HttpServletRequest request,
HttpServletResponse response)
-
Please call super.createModel(...) and wrap it with a new model to avoid problems with action property resoloution.
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/WebWork.html b/docs/chinese/wikidocs/WebWork.html
deleted file mode 100644
index 99ec4c5a8..000000000
--- a/docs/chinese/wikidocs/WebWork.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
- WebWork 2 : WebWork
-
-
-
-
-
-
-
-
-
-
- This page last changed on Dec 14, 2004 by plightbo .
-
-
- Welcome to the WebWork wiki. WebWork's official homepage is http://www.opensymphony.com/webwork/ . There you can find documentation for the latest released version of WebWork. This wiki is used for additional information as well as documentation for the latest developing version (see Previous releases ).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Document generated by Confluence on Dec 14, 2004 16:37
-
-
-
-
\ No newline at end of file
diff --git a/docs/chinese/wikidocs/WebWork_attachments/webworka [Converted].eps b/docs/chinese/wikidocs/WebWork_attachments/webworka [Converted].eps
deleted file mode 100644
index 1624a3836..000000000
--- a/docs/chinese/wikidocs/WebWork_attachments/webworka [Converted].eps
+++ /dev/null
@@ -1,52 +0,0 @@
-%!PS-Adobe-3.1 EPSF-3.0
%%Title: webworka [Converted].eps
%%Creator: Adobe Illustrator(R) 11
%%AI8_CreatorVersion: 11.0.0
%AI9_PrintingDataBegin
%%For: H
%%CreationDate: 3/30/04
%%BoundingBox: 0 0 619 576
%%HiResBoundingBox: 0 0 618.3335 576
%%CropBox: 0 0 618.3335 576
%%LanguageLevel: 2
%%DocumentData: Clean7Bit
%%Pages: 1
%%DocumentNeededResources:
%%DocumentSuppliedResources: procset Adobe_AGM_Image (1.0 0)
%%+ procset Adobe_CoolType_Utility_T42 (1.0 0)
%%+ procset Adobe_CoolType_Utility_MAKEOCF (1.19 0)
%%+ procset Adobe_CoolType_Core (2.23 0)
%%+ procset Adobe_AGM_Core (2.0 0)
%%+ procset Adobe_AGM_Utils (1.0 0)
%%DocumentFonts:
%%DocumentNeededFonts:
%%DocumentNeededFeatures:
%%DocumentSuppliedFeatures:
%%DocumentProcessColors: Cyan Magenta Yellow Black
%%DocumentCustomColors:
%%CMYKCustomColor:
%%RGBCustomColor:
%ADO_ContainsXMP: MainFirst
%AI7_Thumbnail: 128 120 8
%%BeginData: 6480 Hex Bytes
%0000330000660000990000CC0033000033330033660033990033CC0033FF
%0066000066330066660066990066CC0066FF009900009933009966009999
%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
%6666006666336666666666996666CC6666FF669900669933669966669999
%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
%9933009933339933669933999933CC9933FF996600996633996666996699
%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
%000011111111220000002200000022222222440000004400000044444444
%550000005500000055555555770000007700000077777777880000008800
%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
%524C45FD7FFFA8A8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD
%FCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD34FFA87EFD09FF7EA9
%FD08FFA8A8A8FD66FF7E28000000A2FD05FF5300000053A8FD04FFA92800
%002253FD32FFA8FD31FF7D00007D5328F87EFFFFFF53F84D7D5300285353
%527D0000537E280053FD63FF2800FFFFFFA82828FFFFA90053CFCFCF7E00
%0100010022A8FFFFFF2801A8FD30FFA8FD31FF0053FD04FF5300A8FF7700
%A8A77BA6A82822FFA82228FD04FF7E007EFD62FF2252FD04FF77007EA84C
%00A8A7A0A0FF0053FFFF2828FD04FF7D007EFD30FFA8FD31FF28007EFFFF
%A8FD060028CFA7CF52007DFFFF7DF87DFFFFA82200FD64FF000028530028
%7EA87DA977000053280028FD04FF28004D520100A8FD31FFA8FD33FF4C01
%0053A8FD05FF7D28002853FD05FFA953002228A8FDB2FFA8FDACFFCFFD2C
%FFA8A8FD0AFFA8537D5377537753A9FD11FFA8FD23FFCAFFFFFFCAFFFFFF
%A0A7FFFFCAFFFFFFCAFFFFFFA8FD05FFA9FD05FFA8FFFFFFA8A9A8A8A8A9
%A8FD05FFA8FFA8FFA8FF2853FD06FFA9FFFFFF7D53537DFD045300A8FD23
%FFA0FD04FFCFA0FD05FFA0FFA8A7A0A7A0A7A0A7A0A6CACA7CA7A0A7A0A7
%A0A6A6FF5353FD04FF7D28FD04FFA828A8A8002800282228002853FF7D28
%0128002822287E5353FD05FFA828A8FD05FFA8FFA8FF7E01A8FD10FFA8FD
%11FFA8A6A8FFFFFFA7A0A8FFFFFFA8A6A8A6A1FFA8FFA8FFCAA77CFFA7A7
%A8FFA8FFA8FFA8A6A75328FD04FF7E00FD04FFA900A80053FFFFA8FFA8FF
%7D007E2828FFFD05A8FF282828532853282800FFFFFF7D28285328532828
%53FD24FFA0CFFFFFFFCFA0FD05FFA0CFA0CFFD06FFA7CFFFC9A7FD07FFA0
%CF5328FD04FF5301A8FFFFFF7E22A8287DFD06FFA900A800A8FD07FF5301
%534C5352532828A8FFFF4D53FD18FFA8FD12FFA7A0A7A0A7A0A67CA7A0A7
%7CA7FFA87CA7A0A7A0A7A0A7A0CFA7A0A0A7A0A7A0A7A0A0CAA900282228
%280100282828222228FF53012228222828280053A8007DFD07FF2853FD05
%FFA8007E7EFF2828284C2853284C28A8FD25FFCACFA8FFFFCFA8CFCACFFD
%04FFA8CFCACFA8CFCACFCFFFCACFA8CFCACFA8CFCFFFFFFF7EA87EA8A8FF
%7EA87EA87EFFFFFFA8A87EA87EA87EA8FFFFA8FD08FFA8A8FD06FFA8A8FF
%FFA97EA87EA87EA87EA8A8FD10FFA8FD5BFFA8FD48FFA87EA9A8A8FF7DFF
%FFCBA8FF7DFF7EFFA8FFA8FF7DFFA8FFA8A8A9FFA8A8FFA8FFFFA8A8A97E
%FFA8FFA87EFF7DFF7EA8FF7EFFA8A8A97EFD24FFA8FD25FF53FF7EA8A87E
%FFFFA8A2A87EFFA8A8A9A8A8A87EA8A87EFFA8FFA8A87EFF7DFFFFA8A8FF
%7DFF7DFF7E7EA87EFF7E7DFF77FF7DA8A8A8FDA4FFA8FDFCFFFFFFFFA8FD
%FCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFF
%FFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD37FFA953
%287EFFA8282877A87D2828A8FD72FF7D53FF28FF537DA7282828A8A928FD
%3AFFA8FD37FF5353A828222852A128FF4C7E7D53FD73FF534D7EFFA85328
%A8FFA92853A8FD3AFFA8FDACFFCFFFCFFFFFFFCFCFA8CFCACAA7FFA8CFA8
%FFFFA9FFFFA8A87DA87EA9A87E7EA853A9FFFFA8FD2EFFA8FD2BFFA8A7FF
%A7A7FFA0A7A7CFFD04A7A8CFA7527DFF28A8A828287D7D7E28287DA8A853
%287D2853FD5BFFA7CFA7CAA7CFCFCFA7CFCACFA7CFA7CFA87D537D537DA2
%A8537E7DA27DFFFFFF7EA9FFA97DFD2EFFA8FD31FFA8A9A8A9A9A9A8A9A8
%FFA8CBA8FFA8FFA8FFA8A9A8A9A8A9A8FD68FFA8FFA9FFA8FFCBFFA8FFA9
%FFA8FFFFFFA8FFA9FFA8FFA9FFA8FD34FFA8FDFCFFFFFFFFA8FDFCFFFFFF
%FFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8FDFCFFFFFFFFA8
%FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD2BFFA0A7A0A07CA77CA6A0A67CA67C
%A67CA07CA67CA07CA67CA67CA67CA07CA67CA07CA67CA67CA6A7FD58FFA7
%C9CACFA0FFCFCFA7CFA7A7A0A7A0A7A7C9A7C9FD04A7A0A7A0A7A6C9A7A7
%A6C9A7CAA0A7A0A6CAFD2CFFA8FD2AFFA6A7CAA8CFA8FFA7CAA7CAA7A7A8
%A7A8CFA7CFA8CFA7CFA8A7A7CAA7CFA7CAA8CAA0A7A8A7A8A77BCAFD57FF
%A7A6A7A7A0A7A7A6A6CAA0A6A7A7A0A7A0A7A0A7A6A7A0A7A7A7A0A7A0A7
%A0A7A0A07CA7A0A6A0A7FD2DFFA8FD2BFFA8A7A7CAA7A7A7CAA7A8A7CAA7
%A7A7CAA7A7A7CAA7A7A7CAA7A7A7CAA7A7A7CAA7A8A7CAA7A8A8FDADFFA8
%FDFCFFFFFFFFA8FDFCFFFFFFFFA8FD2BFFA87D7D7E537E7D7E537E7D7E7D
%7E7D7E7D7E7D7E7D7E7D7E7D7E7D7E7D7E7D7E7D7E7D7E7DA8FD59FF7D22
%5328005328282853FD090001FD070001FD07002800000053FD2DFFA8FD2A
%FF28537D7D53A8A97E7E537728284C00287D2853777E285353282828227D
%5253537728537D535328007EFD57FF28537DA87EA8A82877A852537DA853
%7E7D7E7DA87D7D7D7E537E777E7D7E53A85301287E287E2800A8FD2CFFA8
%FD2AFFA82852002228280028282200280028002828280028282800282228
%00282828002800220022002853FD5AFFA9FFA9FFFFFFA9FFFFFFA9FFFFFF
%A9FFFFFFA9FFFFFFA9FFFFFFA9FFFFFFA9FD34FFA8FDFCFFFFFFFFA8FDFC
%FFFFFFFFA8FDACFF7EA8A8A87EA8A8A87EA8A8A8A2A8A8A8A2A8A8A8A2A8
%A8A8A2A8A8A8A2A8A8A8A2FD04A8FD2EFFA8FD2AFFA80028000127280028
%27000001FD07000100000001FD0B0001000028FD58FF2852527627A07C7C
%52764B280053002853534C7D7D4C525300280028535328535253537E0053
%22007EFD2CFFA8FD2AFF2827525176757C2752514C527D7E7D7DA853A87E
%7E537E7D7D7D7E537E7D7E7E7D00287D4C7D53007EFD57FF7E282728004C
%270100520022FD04280028282800282822FD042800282828002200220022
%0053FD2DFFA8FD2BFFA8A87EA87EA87EA87EA87EA87EA87EA87EA87EA87E
%A87EA87EA87EA87EA87EA87EA87EA87EA8FDAEFFA8FDFCFFFFFFFFA8FFFF
%7D527DFD04527DA852527D7D527D527D52FD6EFFFD0BA8FFFD05A8FD6CFF
%A8FFFFA87DA87DA8527DA8FD78FFA8A87DA87DFD08A8FD70FFA8FFFFA852
%7D7D7D527D7D7D527D527DFD73FFA8A87DA8A8A87DFFA8A87DFD72FFA8FF
%FFA852A852FD047DA87D7DA8FDFCFFFDF4FFA8A8FFA8FFA8FFA8FFA8FFA8
%FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
%FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
%FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
%FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF
%%EndData
%%EndComments
%%BeginDefaults
%%ViewingOrientation: 1 0 0 1
%%EndDefaults
%%BeginProlog
%%BeginResource: procset Adobe_AGM_Utils 1.0 0
%%Version: 1.0 0
%%Copyright: Copyright (C) 2000-2003 Adobe Systems, Inc. All Rights Reserved.
systemdict /setpacking known
{
currentpacking
true setpacking
} if
userdict /Adobe_AGM_Utils 68 dict dup begin put
/bdf
{
bind def
} bind def
/nd{
null def
}bdf
/xdf
{
exch def
}bdf
/ldf
{
load def
}bdf
/ddf
{
put
}bdf
/xddf
{
3 -1 roll put
}bdf
/xpt
{
exch put
}bdf
/ndf
{
exch dup where{
pop pop pop
}{
xdf
}ifelse
}def
/cdndf
{
exch dup currentdict exch known{
pop pop
}{
exch def
}ifelse
}def
/bdict
{
mark
}bdf
/edict
{
counttomark 2 idiv dup dict begin {def} repeat pop currentdict end
}def
/ps_level
/languagelevel where{
pop systemdict /languagelevel get exec
}{
1
}ifelse
def
/level2
ps_level 2 ge
def
/level3
ps_level 3 ge
def
/ps_version
{version cvr} stopped {
-1
}if
def
/makereadonlyarray
{
/packedarray where{
pop packedarray
}{
array astore readonly
}ifelse
}bdf
/map_reserved_ink_name
{
dup type /stringtype eq{
dup /Red eq{
pop (_Red_)
}{
dup /Green eq{
pop (_Green_)
}{
dup /Blue eq{
pop (_Blue_)
}{
dup () cvn eq{
pop (Process)
}if
}ifelse
}ifelse
}ifelse
}if
}bdf
/AGMUTIL_GSTATE 22 dict def
/get_gstate
{
AGMUTIL_GSTATE begin
/AGMUTIL_GSTATE_clr_spc currentcolorspace def
/AGMUTIL_GSTATE_clr_indx 0 def
/AGMUTIL_GSTATE_clr_comps 12 array def
mark currentcolor counttomark
{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def} repeat pop
/AGMUTIL_GSTATE_fnt rootfont def
/AGMUTIL_GSTATE_lw currentlinewidth def
/AGMUTIL_GSTATE_lc currentlinecap def
/AGMUTIL_GSTATE_lj currentlinejoin def
/AGMUTIL_GSTATE_ml currentmiterlimit def
currentdash /AGMUTIL_GSTATE_do xdf /AGMUTIL_GSTATE_da xdf
/AGMUTIL_GSTATE_sa currentstrokeadjust def
/AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
/AGMUTIL_GSTATE_op currentoverprint def
/AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
/AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
currentcolortransfer cvlit /AGMUTIL_GSTATE_gy_xfer xdf cvlit /AGMUTIL_GSTATE_b_xfer xdf
cvlit /AGMUTIL_GSTATE_g_xfer xdf cvlit /AGMUTIL_GSTATE_r_xfer xdf
/AGMUTIL_GSTATE_ht currenthalftone def
/AGMUTIL_GSTATE_flt currentflat def
end
}def
/set_gstate
{
AGMUTIL_GSTATE begin
AGMUTIL_GSTATE_clr_spc setcolorspace
AGMUTIL_GSTATE_clr_indx {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def} repeat setcolor
AGMUTIL_GSTATE_fnt setfont
AGMUTIL_GSTATE_lw setlinewidth
AGMUTIL_GSTATE_lc setlinecap
AGMUTIL_GSTATE_lj setlinejoin
AGMUTIL_GSTATE_ml setmiterlimit
AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
AGMUTIL_GSTATE_sa setstrokeadjust
AGMUTIL_GSTATE_clr_rnd setcolorrendering
AGMUTIL_GSTATE_op setoverprint
AGMUTIL_GSTATE_bg cvx setblackgeneration
AGMUTIL_GSTATE_ucr cvx setundercolorremoval
AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
AGMUTIL_GSTATE_ht /HalftoneType get dup 9 eq exch 100 eq or
{
currenthalftone /HalftoneType get AGMUTIL_GSTATE_ht /HalftoneType get ne
{
mark AGMUTIL_GSTATE_ht {sethalftone} stopped cleartomark
} if
}{
AGMUTIL_GSTATE_ht sethalftone
} ifelse
AGMUTIL_GSTATE_flt setflat
end
}def
/get_gstate_and_matrix
{
AGMUTIL_GSTATE begin
/AGMUTIL_GSTATE_ctm matrix currentmatrix def
end
get_gstate
}def
/set_gstate_and_matrix
{
set_gstate
AGMUTIL_GSTATE begin
AGMUTIL_GSTATE_ctm setmatrix
end
}def
/AGMUTIL_str256 256 string def
/AGMUTIL_src256 256 string def
/AGMUTIL_dst64 64 string def
/AGMUTIL_srcLen nd
/AGMUTIL_ndx nd
/agm_sethalftone
{
dup
begin
/_Data load
/Thresholds xdf
end
level3
{ sethalftone }{
dup /HalftoneType get 3 eq {
sethalftone
} {pop} ifelse
}ifelse
} def
/rdcmntline
{
currentfile AGMUTIL_str256 readline pop
(%) anchorsearch {pop} if
} bdf
/filter_cmyk
{
dup type /filetype ne{
exch () /SubFileDecode filter
}
{
exch pop
}
ifelse
[
exch
{
AGMUTIL_src256 readstring pop
dup length /AGMUTIL_srcLen exch def
/AGMUTIL_ndx 0 def
AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
1 index exch get
AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
/AGMUTIL_ndx AGMUTIL_ndx 1 add def
}for
pop
AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
}
bind
/exec cvx
] cvx
} bdf
/filter_indexed_devn
{
cvi Names length mul names_index add Lookup exch get
} bdf
/filter_devn
{
4 dict begin
/srcStr xdf
/dstStr xdf
dup type /filetype ne{
0 () /SubFileDecode filter
}if
[
exch
[
/devicen_colorspace_dict /AGMCORE_gget cvx /begin cvx
currentdict /srcStr get /readstring cvx /pop cvx
/dup cvx /length cvx 0 /gt cvx [
Adobe_AGM_Utils /AGMUTIL_ndx 0 /ddf cvx
names_index Names length currentdict /srcStr get length 1 sub {
1 /index cvx /exch cvx /get cvx
currentdict /dstStr get /AGMUTIL_ndx /load cvx 3 -1 /roll cvx /put cvx
Adobe_AGM_Utils /AGMUTIL_ndx /AGMUTIL_ndx /load cvx 1 /add cvx /ddf cvx
} for
currentdict /dstStr get 0 /AGMUTIL_ndx /load cvx /getinterval cvx
] cvx /if cvx
/end cvx
] cvx
bind
/exec cvx
] cvx
end
} bdf
/AGMUTIL_imagefile nd
/read_image_file
{
AGMUTIL_imagefile 0 setfileposition
10 dict begin
/imageDict xdf
/imbufLen Width BitsPerComponent mul 7 add 8 idiv def
/imbufIdx 0 def
/origDataSource imageDict /DataSource get def
/origMultipleDataSources imageDict /MultipleDataSources get def
/origDecode imageDict /Decode get def
/dstDataStr imageDict /Width get colorSpaceElemCnt mul string def
/srcDataStrs [ imageDict begin
currentdict /MultipleDataSources known {MultipleDataSources {DataSource length}{1}ifelse}{1} ifelse
{
Width Decode length 2 div mul cvi string
} repeat
end ] def
imageDict /MultipleDataSources known {MultipleDataSources}{false} ifelse
{
/imbufCnt imageDict /DataSource get length def
/imbufs imbufCnt array def
0 1 imbufCnt 1 sub {
/imbufIdx xdf
imbufs imbufIdx imbufLen string put
imageDict /DataSource get imbufIdx [ AGMUTIL_imagefile imbufs imbufIdx get /readstring cvx /pop cvx ] cvx put
} for
DeviceN_PS2 {
imageDict begin
/DataSource [ DataSource /devn_sep_datasource cvx ] cvx def
/MultipleDataSources false def
/Decode [0 1] def
end
} if
}{
/imbuf imbufLen string def
Indexed_DeviceN level3 not and DeviceN_NoneName or {
imageDict begin
/DataSource [AGMUTIL_imagefile Decode BitsPerComponent false 1 /filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource /exec cvx] cvx def
/Decode [0 1] def
end
}{
imageDict /DataSource {AGMUTIL_imagefile imbuf readstring pop} put
} ifelse
} ifelse
imageDict exch
load exec
imageDict /DataSource origDataSource put
imageDict /MultipleDataSources origMultipleDataSources put
imageDict /Decode origDecode put
end
} bdf
/write_image_file
{
begin
{ (AGMUTIL_imagefile) (w+) file } stopped{
false
}{
Adobe_AGM_Utils/AGMUTIL_imagefile xddf
2 dict begin
/imbufLen Width BitsPerComponent mul 7 add 8 idiv def
MultipleDataSources {DataSource 0 get}{DataSource}ifelse type /filetype eq {
/imbuf imbufLen string def
}if
1 1 Height {
pop
MultipleDataSources {
0 1 DataSource length 1 sub {
DataSource type dup
/arraytype eq {
pop DataSource exch get exec
}{
/filetype eq {
DataSource exch get imbuf readstring pop
}{
DataSource exch get
} ifelse
} ifelse
AGMUTIL_imagefile exch writestring
} for
}{
DataSource type dup
/arraytype eq {
pop DataSource exec
}{
/filetype eq {
DataSource imbuf readstring pop
}{
DataSource
} ifelse
} ifelse
AGMUTIL_imagefile exch writestring
} ifelse
}for
end
true
}ifelse
end
} bdf
/close_image_file
{
AGMUTIL_imagefile closefile (AGMUTIL_imagefile) deletefile
}def
statusdict /product known userdict /AGMP_current_show known not and{
/pstr statusdict /product get def
pstr (HP LaserJet 2200) eq
pstr (HP LaserJet 4000 Series) eq or
pstr (HP LaserJet 4050 Series ) eq or
pstr (HP LaserJet 8000 Series) eq or
pstr (HP LaserJet 8100 Series) eq or
pstr (HP LaserJet 8150 Series) eq or
pstr (HP LaserJet 5000 Series) eq or
pstr (HP LaserJet 5100 Series) eq or
pstr (HP Color LaserJet 4500) eq or
pstr (HP Color LaserJet 4600) eq or
pstr (HP LaserJet 5Si) eq or
pstr (HP LaserJet 1200 Series) eq or
pstr (HP LaserJet 1300 Series) eq or
pstr (HP LaserJet 4100 Series) eq or
{
userdict /AGMP_current_show /show load put
userdict /show {
currentcolorspace 0 get
/Pattern eq
{false charpath f}
{AGMP_current_show} ifelse
} put
}if
currentdict /pstr undef
} if
/consumeimagedata
{
begin
currentdict /MultipleDataSources known not
{/MultipleDataSources false def} if
MultipleDataSources
{
1 dict begin
/flushbuffer Width cvi string def
1 1 Height cvi
{
pop
0 1 DataSource length 1 sub
{
DataSource exch get
dup type dup
/filetype eq
{
exch flushbuffer readstring pop pop
}if
/arraytype eq
{
exec pop
}if
}for
}for
end
}
{
/DataSource load type dup
/filetype eq
{
1 dict begin
/flushbuffer Width Decode length 2 div mul cvi string def
1 1 Height { pop DataSource flushbuffer readstring pop pop} for
end
}if
/arraytype eq
{
1 1 Height { pop DataSource pop } for
}if
}ifelse
end
}bdf
/addprocs
{
2{/exec load}repeat
3 1 roll
[ 5 1 roll ] bind cvx
}def
/modify_halftone_xfer
{
currenthalftone dup length dict copy begin
currentdict 2 index known{
1 index load dup length dict copy begin
currentdict/TransferFunction known{
/TransferFunction load
}{
currenttransfer
}ifelse
addprocs /TransferFunction xdf
currentdict end def
currentdict end sethalftone
}{
currentdict/TransferFunction known{
/TransferFunction load
}{
currenttransfer
}ifelse
addprocs /TransferFunction xdf
currentdict end sethalftone
pop
}ifelse
}def
/clonearray
{
dup xcheck exch
dup length array exch
Adobe_AGM_Core/AGMCORE_tmp -1 ddf
{
Adobe_AGM_Core/AGMCORE_tmp AGMCORE_tmp 1 add ddf
dup type /dicttype eq
{
AGMCORE_tmp
exch
clonedict
Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
} if
dup type /arraytype eq
{
AGMCORE_tmp exch
clonearray
Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
} if
exch dup
AGMCORE_tmp 4 -1 roll put
}forall
exch {cvx} if
}bdf
/clonedict
{
dup length dict
begin
{
dup type /dicttype eq
{
clonedict
} if
dup type /arraytype eq
{
clonearray
} if
def
}forall
currentdict
end
}bdf
/DeviceN_PS2
{
/currentcolorspace AGMCORE_gget 0 get /DeviceN eq level3 not and
} bdf
/Indexed_DeviceN
{
/indexed_colorspace_dict AGMCORE_gget dup null ne {
/CSD known
}{
pop false
} ifelse
} bdf
/DeviceN_NoneName
{
/Names where {
pop
false Names
{
(None) eq or
} forall
}{
false
}ifelse
} bdf
/DeviceN_PS2_inRip_seps
{
/AGMCORE_in_rip_sep where
{
pop dup type dup /arraytype eq exch /packedarraytype eq or
{
dup 0 get /DeviceN eq level3 not and AGMCORE_in_rip_sep and
{
/currentcolorspace exch AGMCORE_gput
false
}
{
true
}ifelse
}
{
true
} ifelse
}
{
true
} ifelse
} bdf
/base_colorspace_type
{
dup type /arraytype eq {0 get} if
} bdf
/doc_setup{
Adobe_AGM_Utils begin
}bdf
/doc_trailer{
currentdict Adobe_AGM_Utils eq{
end
}if
}bdf
systemdict /setpacking known
{
setpacking
} if
%%EndResource
%%BeginResource: procset Adobe_AGM_Core 2.0 0
%%Version: 2.0 0
%%Copyright: Copyright (C) 1997-2003 Adobe Systems, Inc. All Rights Reserved.
systemdict /setpacking known
{
currentpacking
true setpacking
} if
userdict /Adobe_AGM_Core 216 dict dup begin put
/nd{
null def
}bind def
/Adobe_AGM_Core_Id /Adobe_AGM_Core_2.0_0 def
/AGMCORE_str256 256 string def
/AGMCORE_save nd
/AGMCORE_graphicsave nd
/AGMCORE_c 0 def
/AGMCORE_m 0 def
/AGMCORE_y 0 def
/AGMCORE_k 0 def
/AGMCORE_cmykbuf 4 array def
/AGMCORE_screen [currentscreen] cvx def
/AGMCORE_tmp 0 def
/AGMCORE_&setgray nd
/AGMCORE_&setcolor nd
/AGMCORE_&setcolorspace nd
/AGMCORE_&setcmykcolor nd
/AGMCORE_cyan_plate nd
/AGMCORE_magenta_plate nd
/AGMCORE_yellow_plate nd
/AGMCORE_black_plate nd
/AGMCORE_plate_ndx nd
/AGMCORE_get_ink_data nd
/AGMCORE_is_cmyk_sep nd
/AGMCORE_host_sep nd
/AGMCORE_avoid_L2_sep_space nd
/AGMCORE_distilling nd
/AGMCORE_composite_job nd
/AGMCORE_producing_seps nd
/AGMCORE_ps_level -1 def
/AGMCORE_ps_version -1 def
/AGMCORE_environ_ok nd
/AGMCORE_CSA_cache 0 dict def
/AGMCORE_CSD_cache 0 dict def
/AGMCORE_pattern_cache 0 dict def
/AGMCORE_currentoverprint false def
/AGMCORE_deltaX nd
/AGMCORE_deltaY nd
/AGMCORE_name nd
/AGMCORE_sep_special nd
/AGMCORE_err_strings 4 dict def
/AGMCORE_cur_err nd
/AGMCORE_ovp nd
/AGMCORE_current_spot_alias false def
/AGMCORE_inverting false def
/AGMCORE_feature_dictCount nd
/AGMCORE_feature_opCount nd
/AGMCORE_feature_ctm nd
/AGMCORE_ConvertToProcess false def
/AGMCORE_Default_CTM matrix def
/AGMCORE_Default_PageSize nd
/AGMCORE_currentbg nd
/AGMCORE_currentucr nd
/AGMCORE_gradientcache 32 dict def
/AGMCORE_in_pattern false def
/knockout_unitsq nd
/AGMCORE_CRD_cache where{
pop
}{
/AGMCORE_CRD_cache 0 dict def
}ifelse
/AGMCORE_key_known
{
where{
/Adobe_AGM_Core_Id known
}{
false
}ifelse
}ndf
/flushinput
{
save
2 dict begin
/CompareBuffer 3 -1 roll def
/readbuffer 256 string def
mark
{
currentfile readbuffer {readline} stopped
{cleartomark mark}
{
not
{pop exit}
if
CompareBuffer eq
{exit}
if
}ifelse
}loop
cleartomark
end
restore
}bdf
/getspotfunction
{
AGMCORE_screen exch pop exch pop
dup type /dicttype eq{
dup /HalftoneType get 1 eq{
/SpotFunction get
}{
dup /HalftoneType get 2 eq{
/GraySpotFunction get
}{
pop
{
abs exch abs 2 copy add 1 gt{
1 sub dup mul exch 1 sub dup mul add 1 sub
}{
dup mul exch dup mul add 1 exch sub
}ifelse
}bind
}ifelse
}ifelse
}if
} def
/clp_npth
{
clip newpath
} def
/eoclp_npth
{
eoclip newpath
} def
/npth_clp
{
newpath clip
} def
/add_grad
{
AGMCORE_gradientcache 3 1 roll put
}bdf
/exec_grad
{
AGMCORE_gradientcache exch get exec
}bdf
/graphic_setup
{
/AGMCORE_graphicsave save def
concat
0 setgray
0 setlinecap
0 setlinejoin
1 setlinewidth
[] 0 setdash
10 setmiterlimit
newpath
false setoverprint
false setstrokeadjust
Adobe_AGM_Core/spot_alias get exec
/Adobe_AGM_Image where {
pop
Adobe_AGM_Image/spot_alias 2 copy known{
get exec
}{
pop pop
}ifelse
} if
100 dict begin
/dictstackcount countdictstack def
/showpage {} def
mark
} def
/graphic_cleanup
{
cleartomark
dictstackcount 1 countdictstack 1 sub {end}for
end
AGMCORE_graphicsave restore
} def
/compose_error_msg
{
grestoreall initgraphics
/Helvetica findfont 10 scalefont setfont
/AGMCORE_deltaY 100 def
/AGMCORE_deltaX 310 def
clippath pathbbox newpath pop pop 36 add exch 36 add exch moveto
0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
0 AGMCORE_&setgray
gsave 1 AGMCORE_&setgray fill grestore
1 setlinewidth gsave stroke grestore
currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
/AGMCORE_deltaY 12 def
/AGMCORE_tmp 0 def
AGMCORE_err_strings exch get
{
dup 32 eq
{
pop
AGMCORE_str256 0 AGMCORE_tmp getinterval
stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
{
currentpoint AGMCORE_deltaY sub exch pop
clippath pathbbox pop pop pop 44 add exch moveto
} if
AGMCORE_str256 0 AGMCORE_tmp getinterval show ( ) show
0 1 AGMCORE_str256 length 1 sub
{
AGMCORE_str256 exch 0 put
}for
/AGMCORE_tmp 0 def
}
{
AGMCORE_str256 exch AGMCORE_tmp xpt
/AGMCORE_tmp AGMCORE_tmp 1 add def
} ifelse
} forall
} bdf
/doc_setup{
Adobe_AGM_Core begin
/AGMCORE_ps_version xdf
/AGMCORE_ps_level xdf
errordict /AGM_handleerror known not{
errordict /AGM_handleerror errordict /handleerror get put
errordict /handleerror {
Adobe_AGM_Core begin
$error /newerror get AGMCORE_cur_err null ne and{
$error /newerror false put
AGMCORE_cur_err compose_error_msg
}if
$error /newerror true put
end
errordict /AGM_handleerror get exec
} bind put
}if
/AGMCORE_environ_ok
ps_level AGMCORE_ps_level ge
ps_version AGMCORE_ps_version ge and
AGMCORE_ps_level -1 eq or
def
AGMCORE_environ_ok not
{/AGMCORE_cur_err /AGMCORE_bad_environ def} if
/AGMCORE_&setgray systemdict/setgray get def
level2{
/AGMCORE_&setcolor systemdict/setcolor get def
/AGMCORE_&setcolorspace systemdict/setcolorspace get def
}if
/AGMCORE_currentbg currentblackgeneration def
/AGMCORE_currentucr currentundercolorremoval def
/AGMCORE_distilling
/product where{
pop systemdict/setdistillerparams known product (Adobe PostScript Parser) ne and
}{
false
}ifelse
def
level2 not{
/xput{
dup load dup length exch maxlength eq{
dup dup load dup
length dup 0 eq {pop 1} if 2 mul dict copy def
}if
load begin
def
end
}def
}{
/xput{
load 3 1 roll put
}def
}ifelse
/AGMCORE_GSTATE AGMCORE_key_known not{
/AGMCORE_GSTATE 21 dict def
/AGMCORE_tmpmatrix matrix def
/AGMCORE_gstack 32 array def
/AGMCORE_gstackptr 0 def
/AGMCORE_gstacksaveptr 0 def
/AGMCORE_gstackframekeys 10 def
/AGMCORE_&gsave /gsave ldf
/AGMCORE_&grestore /grestore ldf
/AGMCORE_&grestoreall /grestoreall ldf
/AGMCORE_&save /save ldf
/AGMCORE_gdictcopy {
begin
{ def } forall
end
}def
/AGMCORE_gput {
AGMCORE_gstack AGMCORE_gstackptr get
3 1 roll
put
}def
/AGMCORE_gget {
AGMCORE_gstack AGMCORE_gstackptr get
exch
get
}def
/gsave {
AGMCORE_&gsave
AGMCORE_gstack AGMCORE_gstackptr get
AGMCORE_gstackptr 1 add
dup 32 ge {limitcheck} if
Adobe_AGM_Core exch
/AGMCORE_gstackptr xpt
AGMCORE_gstack AGMCORE_gstackptr get
AGMCORE_gdictcopy
}def
/grestore {
AGMCORE_&grestore
AGMCORE_gstackptr 1 sub
dup AGMCORE_gstacksaveptr lt {1 add} if
Adobe_AGM_Core exch
/AGMCORE_gstackptr xpt
}def
/grestoreall {
AGMCORE_&grestoreall
Adobe_AGM_Core
/AGMCORE_gstackptr AGMCORE_gstacksaveptr put
}def
/save {
AGMCORE_&save
AGMCORE_gstack AGMCORE_gstackptr get
AGMCORE_gstackptr 1 add
dup 32 ge {limitcheck} if
Adobe_AGM_Core begin
/AGMCORE_gstackptr exch def
/AGMCORE_gstacksaveptr AGMCORE_gstackptr def
end
AGMCORE_gstack AGMCORE_gstackptr get
AGMCORE_gdictcopy
}def
0 1 AGMCORE_gstack length 1 sub {
AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
} for
}if
level3 /AGMCORE_&sysshfill AGMCORE_key_known not and
{
/AGMCORE_&sysshfill systemdict/shfill get def
/AGMCORE_&usrshfill /shfill load def
/AGMCORE_&sysmakepattern systemdict/makepattern get def
/AGMCORE_&usrmakepattern /makepattern load def
}if
/currentcmykcolor [0 0 0 0] AGMCORE_gput
/currentstrokeadjust false AGMCORE_gput
/currentcolorspace [/DeviceGray] AGMCORE_gput
/sep_tint 0 AGMCORE_gput
/devicen_tints [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] AGMCORE_gput
/sep_colorspace_dict null AGMCORE_gput
/devicen_colorspace_dict null AGMCORE_gput
/indexed_colorspace_dict null AGMCORE_gput
/currentcolor_intent () AGMCORE_gput
/customcolor_tint 1 AGMCORE_gput
<<
/MaxPatternItem currentsystemparams /MaxPatternCache get
>>
setuserparams
end
}def
/page_setup
{
/setcmykcolor where{
pop
Adobe_AGM_Core/AGMCORE_&setcmykcolor /setcmykcolor load put
}if
Adobe_AGM_Core begin
/setcmykcolor
{
4 copy AGMCORE_cmykbuf astore /currentcmykcolor exch AGMCORE_gput
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt {
pop 0
} if
3 1 roll
} repeat
setrgbcolor pop
}ndf
/currentcmykcolor
{
/currentcmykcolor AGMCORE_gget aload pop
}ndf
/setoverprint
{
pop
}ndf
/currentoverprint
{
false
}ndf
/AGMCORE_deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt def
/AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
/AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
/AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
/AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
/AGMCORE_plate_ndx
AGMCORE_cyan_plate{
0
}{
AGMCORE_magenta_plate{
1
}{
AGMCORE_yellow_plate{
2
}{
AGMCORE_black_plate{
3
}{
4
}ifelse
}ifelse
}ifelse
}ifelse
def
/AGMCORE_have_reported_unsupported_color_space false def
/AGMCORE_report_unsupported_color_space
{
AGMCORE_have_reported_unsupported_color_space false eq
{
(Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.) ==
Adobe_AGM_Core /AGMCORE_have_reported_unsupported_color_space true ddf
} if
}def
/AGMCORE_composite_job
AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
/AGMCORE_in_rip_sep
/AGMCORE_in_rip_sep where{
pop AGMCORE_in_rip_sep
}{
AGMCORE_distilling
{
false
}{
userdict/Adobe_AGM_OnHost_Seps known{
false
}{
level2{
currentpagedevice/Separations 2 copy known{
get
}{
pop pop false
}ifelse
}{
false
}ifelse
}ifelse
}ifelse
}ifelse
def
/AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
/AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
/AGM_preserve_spots
/AGM_preserve_spots where{
pop AGM_preserve_spots
}{
AGMCORE_distilling AGMCORE_producing_seps or
}ifelse
def
/AGM_is_distiller_preserving_spotimages
{
currentdistillerparams/PreserveOverprintSettings known
{
currentdistillerparams/PreserveOverprintSettings get
{
currentdistillerparams/ColorConversionStrategy known
{
currentdistillerparams/ColorConversionStrategy get
/LeaveColorUnchanged eq
}{
true
}ifelse
}{
false
}ifelse
}{
false
}ifelse
}def
/convert_spot_to_process where {pop}{
/convert_spot_to_process
{
dup map_alias {
/Name get exch pop
} if
dup dup (None) eq exch (All) eq or
{
pop false
}{
AGMCORE_host_sep
{
gsave
1 0 0 0 setcmykcolor currentgray 1 exch sub
0 1 0 0 setcmykcolor currentgray 1 exch sub
0 0 1 0 setcmykcolor currentgray 1 exch sub
0 0 0 1 setcmykcolor currentgray 1 exch sub
add add add 0 eq
{
pop false
}{
false setoverprint
1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
currentgray 0 eq
}ifelse
grestore
}{
AGMCORE_distilling
{
pop AGM_is_distiller_preserving_spotimages not
}{
Adobe_AGM_Core/AGMCORE_name xddf
false
Adobe_AGM_Core/AGMCORE_in_pattern known {Adobe_AGM_Core/AGMCORE_in_pattern get}{false} ifelse
not currentpagedevice/OverrideSeparations known and
{
currentpagedevice/OverrideSeparations get
{
/HqnSpots /ProcSet resourcestatus
{
pop pop pop true
}if
}if
}if
{
AGMCORE_name /HqnSpots /ProcSet findresource /TestSpot get exec not
}{
gsave
[/Separation AGMCORE_name /DeviceGray {}]setcolorspace
false
currentpagedevice/SeparationColorNames 2 copy known
{
get
{ AGMCORE_name eq or}forall
not
}{
pop pop pop true
}ifelse
grestore
}ifelse
}ifelse
}ifelse
}ifelse
}def
}ifelse
/convert_to_process where {pop}{
/convert_to_process
{
dup length 0 eq
{
pop false
}{
AGMCORE_host_sep
{
dup true exch
{
dup (Cyan) eq exch
dup (Magenta) eq 3 -1 roll or exch
dup (Yellow) eq 3 -1 roll or exch
dup (Black) eq 3 -1 roll or
{pop}
{convert_spot_to_process and}ifelse
}
forall
{
true exch
{
dup (Cyan) eq exch
dup (Magenta) eq 3 -1 roll or exch
dup (Yellow) eq 3 -1 roll or exch
(Black) eq or and
}forall
not
}{pop false}ifelse
}{
false exch
{
dup (Cyan) eq exch
dup (Magenta) eq 3 -1 roll or exch
dup (Yellow) eq 3 -1 roll or exch
dup (Black) eq 3 -1 roll or
{pop}
{convert_spot_to_process or}ifelse
}
forall
}ifelse
}ifelse
}def
}ifelse
/AGMCORE_avoid_L2_sep_space
version cvr 2012 lt
level2 and
AGMCORE_producing_seps not and
def
/AGMCORE_is_cmyk_sep
AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
def
/AGM_avoid_0_cmyk where{
pop AGM_avoid_0_cmyk
}{
AGM_preserve_spots
userdict/Adobe_AGM_OnHost_Seps known
userdict/Adobe_AGM_InRip_Seps known or
not and
}ifelse
{
/setcmykcolor[
{
4 copy add add add 0 eq currentoverprint and{
pop 0.0005
}if
}/exec cvx
/AGMCORE_&setcmykcolor load dup type/operatortype ne{
/exec cvx
}if
]cvx def
}if
AGMCORE_host_sep{
/setcolortransfer
{
AGMCORE_cyan_plate{
pop pop pop
}{
AGMCORE_magenta_plate{
4 3 roll pop pop pop
}{
AGMCORE_yellow_plate{
4 2 roll pop pop pop
}{
4 1 roll pop pop pop
}ifelse
}ifelse
}ifelse
settransfer
}
def
/AGMCORE_get_ink_data
AGMCORE_cyan_plate{
{pop pop pop}
}{
AGMCORE_magenta_plate{
{4 3 roll pop pop pop}
}{
AGMCORE_yellow_plate{
{4 2 roll pop pop pop}
}{
{4 1 roll pop pop pop}
}ifelse
}ifelse
}ifelse
def
/AGMCORE_RemoveProcessColorNames
{
1 dict begin
/filtername
{
dup /Cyan eq 1 index (Cyan) eq or
{pop (_cyan_)}if
dup /Magenta eq 1 index (Magenta) eq or
{pop (_magenta_)}if
dup /Yellow eq 1 index (Yellow) eq or
{pop (_yellow_)}if
dup /Black eq 1 index (Black) eq or
{pop (_black_)}if
}def
dup type /arraytype eq
{[exch {filtername}forall]}
{filtername}ifelse
end
}def
/AGMCORE_IsSeparationAProcessColor
{
dup (Cyan) eq exch dup (Magenta) eq exch dup (Yellow) eq exch (Black) eq or or or
}def
level3 {
/AGMCORE_IsCurrentColor
{
gsave
false setoverprint
1 1 1 1 5 -1 roll findcmykcustomcolor 1 setcustomcolor
currentgray 0 eq
grestore
}def
/AGMCORE_filter_functiondatasource
{
5 dict begin
/data_in xdf
data_in type /stringtype eq
{
/ncomp xdf
/comp xdf
/string_out data_in length ncomp idiv string def
0 ncomp data_in length 1 sub
{
string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
}for
string_out
}{
string /string_in xdf
/string_out 1 string def
/component xdf
[
data_in string_in /readstring cvx
[component /get cvx 255 /exch cvx /sub cvx string_out /exch cvx 0 /exch cvx /put cvx string_out]cvx
[/pop cvx ()]cvx /ifelse cvx
]cvx /ReusableStreamDecode filter
}ifelse
end
}def
/AGMCORE_separateShadingFunction
{
2 dict begin
/paint? xdf
/channel xdf
begin
FunctionType 0 eq
{
/DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
currentdict /Decode known
{/Decode Decode channel 2 mul 2 getinterval def}if
paint? not
{/Decode [1 1]def}if
}if
FunctionType 2 eq
{
paint?
{
/C0 [C0 channel get 1 exch sub] def
/C1 [C1 channel get 1 exch sub] def
}{
/C0 [1] def
/C1 [1] def
}ifelse
}if
FunctionType 3 eq
{
/Functions [Functions {channel paint? AGMCORE_separateShadingFunction} forall] def
}if
currentdict /Range known
{/Range [0 1] def}if
currentdict
end
end
}def
/AGMCORE_separateShading
{
3 -1 roll begin
currentdict /Function known
{
currentdict /Background known
{[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
Function 3 1 roll AGMCORE_separateShadingFunction /Function xdf
/ColorSpace [/DeviceGray] def
}{
ColorSpace dup type /arraytype eq {0 get}if /DeviceCMYK eq
{
/ColorSpace [/DeviceN [/_cyan_ /_magenta_ /_yellow_ /_black_] /DeviceCMYK {}] def
}{
ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
}ifelse
ColorSpace 0 get /Separation eq
{
{
[1 /exch cvx /sub cvx]cvx
}{
[/pop cvx 1]cvx
}ifelse
ColorSpace 3 3 -1 roll put
pop
}{
{
[exch ColorSpace 1 get length 1 sub exch sub /index cvx 1 /exch cvx /sub cvx ColorSpace 1 get length 1 add 1 /roll cvx ColorSpace 1 get length{/pop cvx} repeat]cvx
}{
pop [ColorSpace 1 get length {/pop cvx} repeat cvx 1]cvx
}ifelse
ColorSpace 3 3 -1 roll bind put
}ifelse
ColorSpace 2 /DeviceGray put
}ifelse
end
}def
/AGMCORE_separateShadingDict
{
dup /ColorSpace get
dup type /arraytype ne
{[exch]}if
dup 0 get /DeviceCMYK eq
{
exch begin
currentdict
AGMCORE_cyan_plate
{0 true}if
AGMCORE_magenta_plate
{1 true}if
AGMCORE_yellow_plate
{2 true}if
AGMCORE_black_plate
{3 true}if
AGMCORE_plate_ndx 4 eq
{0 false}if
dup not currentoverprint and
{/AGMCORE_ignoreshade true def}if
AGMCORE_separateShading
currentdict
end exch
}if
dup 0 get /Separation eq
{
exch begin
ColorSpace 1 get dup /None ne exch /All ne and
{
ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
{
ColorSpace 2 get dup type /arraytype eq {0 get}if /DeviceCMYK eq
{
/ColorSpace
[
/Separation
ColorSpace 1 get
/DeviceGray
[
ColorSpace 3 get /exec cvx
4 AGMCORE_plate_ndx sub -1 /roll cvx
4 1 /roll cvx
3 [/pop cvx]cvx /repeat cvx
1 /exch cvx /sub cvx
]cvx
]def
}{
AGMCORE_report_unsupported_color_space
AGMCORE_black_plate not
{
currentdict 0 false AGMCORE_separateShading
}if
}ifelse
}{
currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
0 exch
dup not currentoverprint and
{/AGMCORE_ignoreshade true def}if
AGMCORE_separateShading
}ifelse
}if
currentdict
end exch
}if
dup 0 get /DeviceN eq
{
exch begin
ColorSpace 1 get convert_to_process
{
ColorSpace 2 get dup type /arraytype eq {0 get}if /DeviceCMYK eq
{
/ColorSpace
[
/DeviceN
ColorSpace 1 get
/DeviceGray
[
ColorSpace 3 get /exec cvx
4 AGMCORE_plate_ndx sub -1 /roll cvx
4 1 /roll cvx
3 [/pop cvx]cvx /repeat cvx
1 /exch cvx /sub cvx
]cvx
]def
}{
AGMCORE_report_unsupported_color_space
AGMCORE_black_plate not
{
currentdict 0 false AGMCORE_separateShading
/ColorSpace [/DeviceGray] def
}if
}ifelse
}{
currentdict
false -1 ColorSpace 1 get
{
AGMCORE_IsCurrentColor
{
1 add
exch pop true exch exit
}if
1 add
}forall
exch
dup not currentoverprint and
{/AGMCORE_ignoreshade true def}if
AGMCORE_separateShading
}ifelse
currentdict
end exch
}if
dup 0 get dup /DeviceCMYK eq exch dup /Separation eq exch /DeviceN eq or or not
{
exch begin
ColorSpace dup type /arraytype eq
{0 get}if
/DeviceGray ne
{
AGMCORE_report_unsupported_color_space
AGMCORE_black_plate not
{
ColorSpace 0 get /CIEBasedA eq
{
/ColorSpace [/Separation /_ciebaseda_ /DeviceGray {}] def
}if
ColorSpace 0 get dup /CIEBasedABC eq exch dup /CIEBasedDEF eq exch /DeviceRGB eq or or
{
/ColorSpace [/DeviceN [/_red_ /_green_ /_blue_] /DeviceRGB {}] def
}if
ColorSpace 0 get /CIEBasedDEFG eq
{
/ColorSpace [/DeviceN [/_cyan_ /_magenta_ /_yellow_ /_black_] /DeviceCMYK {}]
}if
currentdict 0 false AGMCORE_separateShading
}if
}if
currentdict
end exch
}if
pop
dup /AGMCORE_ignoreshade known
{
begin
/ColorSpace [/Separation (None) /DeviceGray {}] def
currentdict end
}if
}def
/shfill
{
clonedict
AGMCORE_separateShadingDict
dup /AGMCORE_ignoreshade known
{pop}
{AGMCORE_&sysshfill}ifelse
}def
/makepattern
{
exch
dup /PatternType get 2 eq
{
clonedict
begin
/Shading Shading AGMCORE_separateShadingDict def
currentdict end
exch AGMCORE_&sysmakepattern
}{
exch AGMCORE_&usrmakepattern
}ifelse
}def
}if
}if
AGMCORE_in_rip_sep{
/setcustomcolor
{
exch aload pop
dup 7 1 roll inRip_spot_has_ink not {
4 {4 index mul 4 1 roll}
repeat
/DeviceCMYK setcolorspace
6 -2 roll pop pop
}{
Adobe_AGM_Core begin
/AGMCORE_k xdf /AGMCORE_y xdf /AGMCORE_m xdf /AGMCORE_c xdf
end
[/Separation 4 -1 roll /DeviceCMYK
{dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
]
setcolorspace
}ifelse
setcolor
}ndf
/setseparationgray
{
[/Separation (All) /DeviceGray {}] setcolorspace_opt
1 exch sub setcolor
}ndf
}{
/setseparationgray
{
AGMCORE_&setgray
}ndf
}ifelse
/findcmykcustomcolor
{
5 makereadonlyarray
}ndf
/setcustomcolor
{
exch aload pop pop
4 {4 index mul 4 1 roll} repeat
setcmykcolor pop
}ndf
/has_color
/colorimage where{
AGMCORE_producing_seps{
pop true
}{
systemdict eq
}ifelse
}{
false
}ifelse
def
/map_index
{
1 index mul exch getinterval {255 div} forall
} bdf
/map_indexed_devn
{
Lookup Names length 3 -1 roll cvi map_index
} bdf
/n_color_components
{
base_colorspace_type
dup /DeviceGray eq{
pop 1
}{
/DeviceCMYK eq{
4
}{
3
}ifelse
}ifelse
}bdf
level2{
/mo /moveto ldf
/li /lineto ldf
/cv /curveto ldf
/knockout_unitsq
{
1 setgray
0 0 1 1 rectfill
}def
/level2ScreenFreq{
begin
60
HalftoneType 1 eq{
pop Frequency
}if
HalftoneType 2 eq{
pop GrayFrequency
}if
HalftoneType 5 eq{
pop Default level2ScreenFreq
}if
end
}def
/currentScreenFreq{
currenthalftone level2ScreenFreq
}def
level2 /setcolorspace AGMCORE_key_known not and{
/AGMCORE_&&&setcolorspace /setcolorspace ldf
/AGMCORE_ReplaceMappedColor
{
dup type dup /arraytype eq exch /packedarraytype eq or
{
dup 0 get dup /Separation eq
{
pop
dup length array copy
dup dup 1 get
current_spot_alias
{
dup map_alias
{
begin
/sep_colorspace_dict currentdict AGMCORE_gput
pop pop pop
[
/Separation Name
CSA map_csa
dup /MappedCSA xdf
/sep_colorspace_proc load
]
dup Name
end
}if
}if
map_reserved_ink_name 1 xpt
}{
/DeviceN eq
{
dup length array copy
dup dup 1 get [
exch {
current_spot_alias{
dup map_alias{
/Name get exch pop
}if
}if
map_reserved_ink_name
} forall
] 1 xpt
}if
}ifelse
}if
}def
/setcolorspace
{
dup type dup /arraytype eq exch /packedarraytype eq or
{
dup 0 get /Indexed eq
{
AGMCORE_distilling
{
/PhotoshopDuotoneList where
{
pop false
}{
true
}ifelse
}{
true
}ifelse
{
aload pop 3 -1 roll
AGMCORE_ReplaceMappedColor
3 1 roll 4 array astore
}if
}{
AGMCORE_ReplaceMappedColor
}ifelse
}if
DeviceN_PS2_inRip_seps {AGMCORE_&&&setcolorspace} if
}def
}if
}{
/adj
{
currentstrokeadjust{
transform
0.25 sub round 0.25 add exch
0.25 sub round 0.25 add exch
itransform
}if
}def
/mo{
adj moveto
}def
/li{
adj lineto
}def
/cv{
6 2 roll adj
6 2 roll adj
6 2 roll adj curveto
}def
/knockout_unitsq
{
1 setgray
8 8 1 [8 0 0 8 0 0] {} image
}def
/currentstrokeadjust{
/currentstrokeadjust AGMCORE_gget
}def
/setstrokeadjust{
/currentstrokeadjust exch AGMCORE_gput
}def
/currentScreenFreq{
currentscreen pop pop
}def
/setcolorspace
{
/currentcolorspace exch AGMCORE_gput
} def
/currentcolorspace
{
/currentcolorspace AGMCORE_gget
} def
/setcolor_devicecolor
{
base_colorspace_type
dup /DeviceGray eq{
pop setgray
}{
/DeviceCMYK eq{
setcmykcolor
}{
setrgbcolor
}ifelse
}ifelse
}def
/setcolor
{
currentcolorspace 0 get
dup /DeviceGray ne{
dup /DeviceCMYK ne{
dup /DeviceRGB ne{
dup /Separation eq{
pop
currentcolorspace 3 get exec
currentcolorspace 2 get
}{
dup /Indexed eq{
pop
currentcolorspace 3 get dup type /stringtype eq{
currentcolorspace 1 get n_color_components
3 -1 roll map_index
}{
exec
}ifelse
currentcolorspace 1 get
}{
/AGMCORE_cur_err /AGMCORE_invalid_color_space def
AGMCORE_invalid_color_space
}ifelse
}ifelse
}if
}if
}if
setcolor_devicecolor
} def
}ifelse
/sop /setoverprint ldf
/lw /setlinewidth ldf
/lc /setlinecap ldf
/lj /setlinejoin ldf
/ml /setmiterlimit ldf
/dsh /setdash ldf
/sadj /setstrokeadjust ldf
/gry /setgray ldf
/rgb /setrgbcolor ldf
/cmyk /setcmykcolor ldf
/sep /setsepcolor ldf
/devn /setdevicencolor ldf
/idx /setindexedcolor ldf
/colr /setcolor ldf
/csacrd /set_csa_crd ldf
/sepcs /setsepcolorspace ldf
/devncs /setdevicencolorspace ldf
/idxcs /setindexedcolorspace ldf
/cp /closepath ldf
/clp /clp_npth ldf
/eclp /eoclp_npth ldf
/f /fill ldf
/ef /eofill ldf
/@ /stroke ldf
/nclp /npth_clp ldf
/gset /graphic_setup ldf
/gcln /graphic_cleanup ldf
currentdict{
dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and {
bind
}if
def
}forall
/currentpagedevice currentpagedevice def
/getrampcolor {
/indx exch def
0 1 NumComp 1 sub {
dup
Samples exch get
dup type /stringtype eq { indx get } if
exch
Scaling exch get aload pop
3 1 roll
mul add
} for
ColorSpaceFamily /Separation eq
{
sep
}
{
ColorSpaceFamily /DeviceN eq
{
devn
}
{
setcolor
}ifelse
}ifelse
} bind def
/sssetbackground { aload pop setcolor } bind def
/RadialShade {
40 dict begin
/ColorSpaceFamily exch def
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/r2 exch def
/c2y exch def
/c2x exch def
/r1 exch def
/c1y exch def
/c1x exch def
/rampdict exch def
/setinkoverprint where {pop /setinkoverprint{pop}def}if
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
c1x c2x eq
{
c1y c2y lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope c2y c1y sub c2x c1x sub div def
/theta slope 1 atan def
c2x c1x lt c2y c1y ge and { /theta theta 180 sub def} if
c2x c1x lt c2y c1y lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
c1x c1y translate
theta rotate
-90 rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
/max { 2 copy gt { pop } {exch pop} ifelse } bind def
/min { 2 copy lt { pop } {exch pop} ifelse } bind def
rampdict begin
40 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
c1x c1y translate
theta rotate
-90 rotate
/c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
/c1y 0 def
/c1x 0 def
/c2x 0 def
ext0 {
0 getrampcolor
c2y r2 add r1 sub 0.0001 lt
{
c1x c1y r1 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2y r1 add r2 le
{
c1x c1y r1 0 360 arc
fill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r1 neg def
/p1y c1y def
/p2x r1 def
/p2y c1y def
p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
fill
}
{
/AA r2 r1 sub c2y div def
/theta AA 1 AA dup mul sub sqrt div 1 atan def
/SS1 90 theta add dup sin exch cos div def
/p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y p1x SS1 div neg def
/SS2 90 theta sub dup sin exch cos div def
/p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y p2x SS2 div neg def
r1 r2 gt
{
/L1maxX p1x yMin p1y sub SS1 div add def
/L2maxX p2x yMin p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
c1x c2x sub dup mul
c1y c2y sub dup mul
add 0.5 exp
0 dtransform
dup mul exch dup mul add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
/hires exch def
hires mul
/numpix exch def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
/xInc c2x c1x sub numsteps div def
/yInc c2y c1y sub numsteps div def
/rInc r2 r1 sub numsteps div def
/cx c1x def
/cy c1y def
/radius r1 def
newpath
xInc 0 eq yInc 0 eq rInc 0 eq and and
{
0 getrampcolor
cx cy radius 0 360 arc
stroke
NumSamples 1 sub getrampcolor
cx cy radius 72 hires div add 0 360 arc
0 setlinewidth
stroke
}
{
0
numsteps
{
dup
subsampling { round cvi } if
getrampcolor
cx cy radius 0 360 arc
/cx cx xInc add def
/cy cy yInc add def
/radius radius rInc add def
cx cy radius 360 0 arcn
eofill
rampIndxInc add
}
repeat
pop
} ifelse
ext1 {
c2y r2 add r1 lt
{
c2x c2y r2 0 360 arc
fill
}
{
c2y r1 add r2 sub 0.0001 le
{
c2x c2y r2 360 0 arcn
pathbbox
/aymax exch def
/axmax exch def
/aymin exch def
/axmin exch def
/bxMin xMin axmin min def
/byMin yMin aymin min def
/bxMax xMax axmax max def
/byMax yMax aymax max def
bxMin byMin moveto
bxMax byMin lineto
bxMax byMax lineto
bxMin byMax lineto
bxMin byMin lineto
eofill
}
{
c2x c2y r2 0 360 arc fill
r1 r2 eq
{
/p1x r2 neg def
/p1y c2y def
/p2x r2 def
/p2y c2y def
p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
fill
}
{
/AA r2 r1 sub c2y div def
/theta AA 1 AA dup mul sub sqrt div 1 atan def
/SS1 90 theta add dup sin exch cos div def
/p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
/p1y c2y p1x SS1 div sub def
/SS2 90 theta sub dup sin exch cos div def
/p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
/p2y c2y p2x SS2 div sub def
r1 r2 lt
{
/L1maxX p1x yMax p1y sub SS1 div add def
/L2maxX p2x yMax p2y sub SS2 div add def
}
{
/L1maxX 0 def
/L2maxX 0 def
}ifelse
p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
L1maxX L1maxX p1x sub SS1 mul p1y add lineto
fill
}
ifelse
}
ifelse
} ifelse
} if
grestore
grestore
end
end
end
} ifelse
} bind def
/GenStrips {
40 dict begin
/ColorSpaceFamily exch def
/background exch def
/ext1 exch def
/ext0 exch def
/BBox exch def
/y2 exch def
/x2 exch def
/y1 exch def
/x1 exch def
/rampdict exch def
/setinkoverprint where {pop /setinkoverprint{pop}def}if
gsave
BBox length 0 gt {
newpath
BBox 0 get BBox 1 get moveto
BBox 2 get BBox 0 get sub 0 rlineto
0 BBox 3 get BBox 1 get sub rlineto
BBox 2 get BBox 0 get sub neg 0 rlineto
closepath
clip
newpath
} if
x1 x2 eq
{
y1 y2 lt {/theta 90 def}{/theta 270 def} ifelse
}
{
/slope y2 y1 sub x2 x1 sub div def
/theta slope 1 atan def
x2 x1 lt y2 y1 ge and { /theta theta 180 sub def} if
x2 x1 lt y2 y1 lt and { /theta theta 180 add def} if
}
ifelse
gsave
clippath
x1 y1 translate
theta rotate
{ pathbbox } stopped
{ 0 0 0 0 } if
/yMax exch def
/xMax exch def
/yMin exch def
/xMin exch def
grestore
xMax xMin eq yMax yMin eq or
{
grestore
end
}
{
rampdict begin
20 dict begin
background length 0 gt { background sssetbackground gsave clippath fill grestore } if
gsave
x1 y1 translate
theta rotate
/xStart 0 def
/xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
/ySpan yMax yMin sub def
/numsteps NumSamples def
/rampIndxInc 1 def
/subsampling false def
xStart 0 transform
xEnd 0 transform
3 -1 roll
sub dup mul
3 1 roll
sub dup mul
add 0.5 exp 72 div
0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
1 index 1 index lt { exch } if pop
mul
/numpix exch def
numpix 0 ne
{
NumSamples numpix div 0.5 gt
{
/numsteps numpix 2 div round cvi dup 1 le { pop 2 } if def
/rampIndxInc NumSamples 1 sub numsteps div def
/subsampling true def
} if
} if
ext0 {
0 getrampcolor
xMin xStart lt
{ xMin yMin xMin neg ySpan rectfill } if
} if
/xInc xEnd xStart sub numsteps div def
/x xStart def
0
numsteps
{
dup
subsampling { round cvi } if
getrampcolor
x yMin xInc ySpan rectfill
/x x xInc add def
rampIndxInc add
}
repeat
pop
ext1 {
xMax xEnd gt
{ xEnd yMin xMax xEnd sub ySpan rectfill } if
} if
grestore
grestore
end
end
end
} ifelse
} bind def
}def
/page_trailer
{
end
}def
/doc_trailer{
}def
systemdict /findcolorrendering known{
/findcolorrendering systemdict /findcolorrendering get def
}if
systemdict /setcolorrendering known{
/setcolorrendering systemdict /setcolorrendering get def
}if
/test_cmyk_color_plate
{
gsave
setcmykcolor currentgray 1 ne
grestore
}def
/inRip_spot_has_ink
{
dup Adobe_AGM_Core/AGMCORE_name xddf
convert_spot_to_process not
}def
/map255_to_range
{
1 index sub
3 -1 roll 255 div mul add
}def
/set_csa_crd
{
/sep_colorspace_dict null AGMCORE_gput
begin
CSA map_csa setcolorspace_opt
set_crd
end
}
def
/setsepcolor
{
/sep_colorspace_dict AGMCORE_gget begin
dup /sep_tint exch AGMCORE_gput
TintProc
end
} def
/setdevicencolor
{
/devicen_colorspace_dict AGMCORE_gget begin
Names length copy
Names length 1 sub -1 0
{
/devicen_tints AGMCORE_gget 3 1 roll xpt
} for
TintProc
end
} def
/sep_colorspace_proc
{
Adobe_AGM_Core/AGMCORE_tmp xddf
/sep_colorspace_dict AGMCORE_gget begin
currentdict/Components known{
Components aload pop
TintMethod/Lab eq{
2 {AGMCORE_tmp mul NComponents 1 roll} repeat
LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll
}{
TintMethod/Subtractive eq{
NComponents{
AGMCORE_tmp mul NComponents 1 roll
}repeat
}{
NComponents{
1 sub AGMCORE_tmp mul 1 add NComponents 1 roll
} repeat
}ifelse
}ifelse
}{
ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
aload pop
}ifelse
end
} def
/sep_colorspace_gray_proc
{
Adobe_AGM_Core/AGMCORE_tmp xddf
/sep_colorspace_dict AGMCORE_gget begin
GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
end
} def
/sep_proc_name
{
dup 0 get
dup /DeviceRGB eq exch /DeviceCMYK eq or level2 not and has_color not and{
pop [/DeviceGray]
/sep_colorspace_gray_proc
}{
/sep_colorspace_proc
}ifelse
} def
/setsepcolorspace
{
current_spot_alias{
dup begin
Name map_alias{
exch pop
}if
end
}if
dup /sep_colorspace_dict exch AGMCORE_gput
begin
/MappedCSA CSA map_csa def
Adobe_AGM_Core/AGMCORE_sep_special Name dup () eq exch (All) eq or ddf
AGMCORE_avoid_L2_sep_space{
[/Indexed MappedCSA sep_proc_name 255 exch
{ 255 div } /exec cvx 3 -1 roll [ 4 1 roll load /exec cvx ] cvx
] setcolorspace_opt
/TintProc {
255 mul round cvi setcolor
}bdf
}{
MappedCSA 0 get /DeviceCMYK eq
currentdict/Components known and
AGMCORE_sep_special not and{
/TintProc [
Components aload pop Name findcmykcustomcolor
/exch cvx /setcustomcolor cvx
] cvx bdf
}{
AGMCORE_host_sep Name (All) eq and{
/TintProc {
1 exch sub setseparationgray
}bdf
}{
AGMCORE_in_rip_sep MappedCSA 0 get /DeviceCMYK eq and
AGMCORE_host_sep or
Name () eq and{
/TintProc [
MappedCSA sep_proc_name exch 0 get /DeviceCMYK eq{
cvx /setcmykcolor cvx
}{
cvx /setgray cvx
}ifelse
] cvx bdf
}{
AGMCORE_producing_seps MappedCSA 0 get dup /DeviceCMYK eq exch /DeviceGray eq or and AGMCORE_sep_special not and{
/TintProc [
/dup cvx
MappedCSA sep_proc_name cvx exch
0 get /DeviceGray eq{
1 /exch cvx /sub cvx 0 0 0 4 -1 /roll cvx
}if
/Name cvx /findcmykcustomcolor cvx /exch cvx
AGMCORE_host_sep{
AGMCORE_is_cmyk_sep
/Name cvx
/AGMCORE_IsSeparationAProcessColor load /exec cvx
/not cvx /and cvx
}{
Name inRip_spot_has_ink not
}ifelse
[
/pop cvx 1
] cvx /if cvx
/setcustomcolor cvx
] cvx bdf
}{
/TintProc /setcolor ldf
[/Separation Name MappedCSA sep_proc_name load ] setcolorspace_opt
}ifelse
}ifelse
}ifelse
}ifelse
}ifelse
set_crd
setsepcolor
end
} def
/additive_blend
{
3 dict begin
/numarrays xdf
/numcolors xdf
0 1 numcolors 1 sub
{
/c1 xdf
1
0 1 numarrays 1 sub
{
1 exch add /index cvx
c1 /get cvx /mul cvx
}for
numarrays 1 add 1 /roll cvx
}for
numarrays [/pop cvx] cvx /repeat cvx
end
}def
/subtractive_blend
{
3 dict begin
/numarrays xdf
/numcolors xdf
0 1 numcolors 1 sub
{
/c1 xdf
1 1
0 1 numarrays 1 sub
{
1 3 3 -1 roll add /index cvx
c1 /get cvx /sub cvx /mul cvx
}for
/sub cvx
numarrays 1 add 1 /roll cvx
}for
numarrays [/pop cvx] cvx /repeat cvx
end
}def
/exec_tint_transform
{
/TintProc [
/TintTransform cvx /setcolor cvx
] cvx bdf
MappedCSA setcolorspace_opt
} bdf
/devn_makecustomcolor
{
2 dict begin
/names_index xdf
/Names xdf
1 1 1 1 Names names_index get findcmykcustomcolor
/devicen_tints AGMCORE_gget names_index get setcustomcolor
Names length {pop} repeat
end
} bdf
/setdevicencolorspace
{
dup /AliasedColorants known {false}{true}ifelse
current_spot_alias and {
6 dict begin
/names_index 0 def
dup /names_len exch /Names get length def
/new_names names_len array def
/new_LookupTables names_len array def
/alias_cnt 0 def
dup /Names get
{
dup map_alias {
exch pop
dup /ColorLookup known {
dup begin
new_LookupTables names_index ColorLookup put
end
}{
dup /Components known {
dup begin
new_LookupTables names_index Components put
end
}{
dup begin
new_LookupTables names_index [null null null null] put
end
} ifelse
} ifelse
new_names names_index 3 -1 roll /Name get put
/alias_cnt alias_cnt 1 add def
}{
/name xdf
new_names names_index name put
dup /LookupTables known {
dup begin
new_LookupTables names_index LookupTables names_index get put
end
}{
dup begin
new_LookupTables names_index [null null null null] put
end
} ifelse
} ifelse
/names_index names_index 1 add def
} forall
alias_cnt 0 gt {
/AliasedColorants true def
0 1 names_len 1 sub {
/names_index xdf
new_LookupTables names_index get 0 get null eq {
dup /Names get names_index get /name xdf
name (Cyan) eq name (Magenta) eq name (Yellow) eq name (Black) eq
or or or not {
/AliasedColorants false def
exit
} if
} if
} for
AliasedColorants {
dup begin
/Names new_names def
/AliasedColorants true def
/LookupTables new_LookupTables def
currentdict /TTTablesIdx known not {
/TTTablesIdx -1 def
} if
currentdict /NComponents known not {
/NComponents TintMethod /Subtractive eq {4}{3}ifelse def
} if
end
} if
}if
end
} if
dup /devicen_colorspace_dict exch AGMCORE_gput
begin
/MappedCSA CSA map_csa def
currentdict /AliasedColorants known {
AliasedColorants
}{
false
} ifelse
/TintTransform load type /nulltype eq or {
/TintTransform [
0 1 Names length 1 sub
{
/TTTablesIdx TTTablesIdx 1 add def
dup LookupTables exch get dup 0 get null eq
{
1 index
Names exch get
dup (Cyan) eq
{
pop exch
LookupTables length exch sub
/index cvx
0 0 0
}
{
dup (Magenta) eq
{
pop exch
LookupTables length exch sub
/index cvx
0 /exch cvx 0 0
}
{
(Yellow) eq
{
exch
LookupTables length exch sub
/index cvx
0 0 3 -1 /roll cvx 0
}
{
exch
LookupTables length exch sub
/index cvx
0 0 0 4 -1 /roll cvx
} ifelse
} ifelse
} ifelse
5 -1 /roll cvx /astore cvx
}
{
dup length 1 sub
LookupTables length 4 -1 roll sub 1 add
/index cvx /mul cvx /round cvx /cvi cvx /get cvx
} ifelse
Names length TTTablesIdx add 1 add 1 /roll cvx
} for
Names length [/pop cvx] cvx /repeat cvx
NComponents Names length
TintMethod /Subtractive eq
{
subtractive_blend
}
{
additive_blend
} ifelse
] cvx bdf
} if
AGMCORE_host_sep {
Names convert_to_process {
exec_tint_transform
}
{
currentdict /AliasedColorants known {
AliasedColorants not
}{
false
} ifelse
5 dict begin
/AvoidAliasedColorants xdf
/painted? false def
/names_index 0 def
/names_len Names length def
Names {
AvoidAliasedColorants {
/currentspotalias current_spot_alias def
false set_spot_alias
} if
AGMCORE_is_cmyk_sep {
dup (Cyan) eq AGMCORE_cyan_plate and exch
dup (Magenta) eq AGMCORE_magenta_plate and exch
dup (Yellow) eq AGMCORE_yellow_plate and exch
(Black) eq AGMCORE_black_plate and or or or {
/devicen_colorspace_dict AGMCORE_gget /TintProc [
Names names_index /devn_makecustomcolor cvx
] cvx ddf
/painted? true def
} if
painted? {exit} if
}{
0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq {
/devicen_colorspace_dict AGMCORE_gget /TintProc [
Names names_index /devn_makecustomcolor cvx
] cvx ddf
/painted? true def
exit
} if
} ifelse
AvoidAliasedColorants {
currentspotalias set_spot_alias
} if
/names_index names_index 1 add def
} forall
painted? {
/devicen_colorspace_dict AGMCORE_gget /names_index names_index put
}{
/devicen_colorspace_dict AGMCORE_gget /TintProc [
names_len [/pop cvx] cvx /repeat cvx 1 /setseparationgray cvx
0 0 0 0 () /findcmykcustomcolor cvx 0 /setcustomcolor cvx
] cvx ddf
} ifelse
end
} ifelse
}
{
AGMCORE_in_rip_sep {
Names convert_to_process not
}{
level3
} ifelse
{
[/DeviceN Names MappedCSA /TintTransform load] setcolorspace_opt
/TintProc level3 not AGMCORE_in_rip_sep and {
[
Names /length cvx [/pop cvx] cvx /repeat cvx
] cvx bdf
}{
/setcolor ldf
} ifelse
}{
exec_tint_transform
} ifelse
} ifelse
set_crd
/AliasedColorants false def
end
} def
/setindexedcolorspace
{
dup /indexed_colorspace_dict exch AGMCORE_gput
begin
currentdict /CSD known {
CSD get_csd /Names known {
CSD get_csd begin
currentdict devncs
AGMCORE_host_sep{
4 dict begin
/devnCompCnt Names length def
/NewLookup HiVal 1 add string def
0 1 HiVal {
/tableIndex xdf
Lookup dup type /stringtype eq {
devnCompCnt tableIndex map_index
}{
exec
} ifelse
setdevicencolor
currentgray
tableIndex exch
HiVal mul cvi
NewLookup 3 1 roll put
} for
[/Indexed currentcolorspace HiVal NewLookup] setcolorspace_opt
end
}{
level3
{
[/Indexed [/DeviceN Names MappedCSA /TintTransform load] HiVal Lookup] setcolorspace_opt
}{
[/Indexed MappedCSA HiVal
[
Lookup dup type /stringtype eq
{/exch cvx CSD get_csd /Names get length dup /mul cvx exch /getinterval cvx {255 div} /forall cvx}
{/exec cvx}ifelse
/TintTransform load /exec cvx
]cvx
]setcolorspace_opt
}ifelse
} ifelse
end
}{
} ifelse
set_crd
}
{
/MappedCSA CSA map_csa def
AGMCORE_host_sep level2 not and{
0 0 0 0 setcmykcolor
}{
[/Indexed MappedCSA
level2 not has_color not and{
dup 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or{
pop [/DeviceGray]
}if
HiVal GrayLookup
}{
HiVal
currentdict/RangeArray known{
{
/indexed_colorspace_dict AGMCORE_gget begin
Lookup exch
dup HiVal gt{
pop HiVal
}if
NComponents mul NComponents getinterval {} forall
NComponents 1 sub -1 0{
RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
NComponents 1 roll
}for
end
} bind
}{
Lookup
}ifelse
}ifelse
] setcolorspace_opt
set_crd
}ifelse
}ifelse
end
}def
/setindexedcolor
{
AGMCORE_host_sep {
/indexed_colorspace_dict AGMCORE_gget dup /CSD known {
begin
CSD get_csd begin
map_indexed_devn
devn
end
end
}{
AGMCORE_gget/Lookup get 4 3 -1 roll map_index
pop setcmykcolor
} ifelse
}{
level3 not AGMCORE_in_rip_sep and /indexed_colorspace_dict AGMCORE_gget /CSD known and {
/indexed_colorspace_dict AGMCORE_gget /CSD get get_csd begin
map_indexed_devn
devn
end
}
{
setcolor
} ifelse
}ifelse
} def
/ignoreimagedata
{
currentoverprint not{
gsave
dup clonedict begin
1 setgray
/Decode [0 1] def
/DataSource def
/MultipleDataSources false def
/BitsPerComponent 8 def
currentdict end
systemdict /image get exec
grestore
}if
consumeimagedata
}def
/add_csa
{
Adobe_AGM_Core begin
/AGMCORE_CSA_cache xput
end
}def
/get_csa_by_name
{
dup type dup /nametype eq exch /stringtype eq or{
Adobe_AGM_Core begin
1 dict begin
/name xdf
AGMCORE_CSA_cache
{
0 get name eq {
exit
}{
pop
} ifelse
}forall
end
end
}{
pop
} ifelse
}def
/map_csa
{
dup type /nametype eq{
Adobe_AGM_Core/AGMCORE_CSA_cache get exch get
}if
}def
/add_csd
{
Adobe_AGM_Core begin
/AGMCORE_CSD_cache xput
end
}def
/get_csd
{
dup type /nametype eq{
Adobe_AGM_Core/AGMCORE_CSD_cache get exch get
}if
}def
/pattern_buf_init
{
/count get 0 0 put
} def
/pattern_buf_next
{
dup /count get dup 0 get
dup 3 1 roll
1 add 0 xpt
get
} def
/cachepattern_compress
{
5 dict begin
currentfile exch 0 exch /SubFileDecode filter /ReadFilter exch def
/patarray 20 dict def
/string_size 16000 def
/readbuffer string_size string def
currentglobal true setglobal
patarray 1 array dup 0 1 put /count xpt
setglobal
/LZWFilter
{
exch
dup length 0 eq {
pop
}{
patarray dup length 1 sub 3 -1 roll put
} ifelse
{string_size}{0}ifelse string
} /LZWEncode filter def
{
ReadFilter readbuffer readstring
exch LZWFilter exch writestring
not {exit} if
} loop
LZWFilter closefile
patarray
end
}def
/cachepattern
{
2 dict begin
currentfile exch 0 exch /SubFileDecode filter /ReadFilter exch def
/patarray 20 dict def
currentglobal true setglobal
patarray 1 array dup 0 1 put /count xpt
setglobal
{
ReadFilter 16000 string readstring exch
patarray dup length 1 sub 3 -1 roll put
not {exit} if
} loop
patarray dup dup length 1 sub () put
end
}def
/add_pattern
{
Adobe_AGM_Core begin
/AGMCORE_pattern_cache xput
end
}def
/get_pattern
{
dup type /nametype eq{
Adobe_AGM_Core/AGMCORE_pattern_cache get exch get
dup wrap_paintproc
}if
}def
/wrap_paintproc
{
statusdict /currentfilenameextend known{
begin
/OldPaintProc /PaintProc load def
/PaintProc
{
mark exch
dup /OldPaintProc get stopped
{closefile restore end} if
cleartomark
} def
end
} {pop} ifelse
} def
/make_pattern
{
dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
exch 3 index /XStep get 1 index exch 2 copy div cvi mul sub sub
exch 3 index /YStep get 1 index exch 2 copy div cvi mul sub sub
matrix translate exch matrix concatmatrix
1 index begin
BBox 0 get XStep div cvi XStep mul /xshift exch neg def
BBox 1 get YStep div cvi YStep mul /yshift exch neg def
BBox 0 get xshift add
BBox 1 get yshift add
BBox 2 get xshift add
BBox 3 get yshift add
4 array astore
/BBox exch def
[ xshift yshift /translate load null /exec load ] dup
3 /PaintProc load put cvx /PaintProc exch def
end
gsave 0 setgray
makepattern
grestore
}def
/set_pattern
{
dup /PatternType get 1 eq{
dup /PaintType get 1 eq{
currentoverprint sop [/DeviceGray] setcolorspace 0 setgray
}if
}if
setpattern
}def
/setcolorspace_opt
{
dup currentcolorspace eq{
pop
}{
setcolorspace
}ifelse
}def
/updatecolorrendering
{
currentcolorrendering/Intent known{
currentcolorrendering/Intent get
}{
null
}ifelse
Intent ne{
false
Intent
AGMCORE_CRD_cache {
exch pop
begin
dup Intent eq{
currentdict setcolorrendering_opt
end
exch pop true exch
exit
}if
end
} forall
pop
not{
systemdict /findcolorrendering known{
Intent findcolorrendering pop
/ColorRendering findresource
dup length dict copy
setcolorrendering_opt
}if
}if
}if
} def
/add_crd
{
AGMCORE_CRD_cache 3 1 roll put
}def
/set_crd
{
AGMCORE_host_sep not level2 and{
currentdict/CRD known{
AGMCORE_CRD_cache CRD get dup null ne{
setcolorrendering_opt
}{
pop
}ifelse
}{
currentdict/Intent known{
updatecolorrendering
}if
}ifelse
currentcolorspace dup type /arraytype eq
{0 get}if
/DeviceRGB eq
{
currentdict/UCR known
{/UCR}{/AGMCORE_currentucr}ifelse
load setundercolorremoval
currentdict/BG known
{/BG}{/AGMCORE_currentbg}ifelse
load setblackgeneration
}if
}if
}def
/setcolorrendering_opt
{
dup currentcolorrendering eq{
pop
}{
begin
/Intent Intent def
currentdict
end
setcolorrendering
}ifelse
}def
/cpaint_gcomp
{
convert_to_process Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
{
(%end_cpaint_gcomp) flushinput
}if
}def
/cpaint_gsep
{
Adobe_AGM_Core/AGMCORE_ConvertToProcess get
{
(%end_cpaint_gsep) flushinput
}if
}def
/cpaint_gend
{
newpath
}def
/path_rez
{
dup 0 ne{
AGMCORE_deviceDPI exch div
dup 1 lt{
pop 1
}if
setflat
}{
pop
}ifelse
}def
/set_spot_alias_ary
{
/AGMCORE_SpotAliasAry where{
pop pop
}{
Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
true set_spot_alias
}ifelse
}def
/set_spot_alias
{
/AGMCORE_SpotAliasAry where{
/AGMCORE_current_spot_alias 3 -1 roll put
}{
pop
}ifelse
}def
/current_spot_alias
{
/AGMCORE_SpotAliasAry where{
/AGMCORE_current_spot_alias get
}{
false
}ifelse
}def
/map_alias
{
/AGMCORE_SpotAliasAry where{
begin
/AGMCORE_name xdf
false
AGMCORE_SpotAliasAry{
dup/Name get AGMCORE_name eq{
save exch
/Adobe_AGM_Core currentdict def
/CSD get get_csd
exch restore
exch pop true
exit
}{
pop
}ifelse
}forall
end
}{
pop false
}ifelse
}bdf
/spot_alias
{
true set_spot_alias
/AGMCORE_&setcustomcolor AGMCORE_key_known not {
Adobe_AGM_Core/AGMCORE_&setcustomcolor /setcustomcolor load put
} if
/customcolor_tint 1 AGMCORE_gput
Adobe_AGM_Core begin
/setcustomcolor
{
dup /customcolor_tint exch AGMCORE_gput
current_spot_alias{
1 index 4 get map_alias{
mark 3 1 roll
setsepcolorspace
counttomark 0 ne{
setsepcolor
}if
pop
pop
}{
AGMCORE_&setcustomcolor
}ifelse
}{
AGMCORE_&setcustomcolor
}ifelse
}bdf
end
}def
/begin_feature
{
Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
{Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
}def
/end_feature
{
2 dict begin
/spd /setpagedevice load def
/setpagedevice { get_gstate spd set_gstate } def
stopped{$error/newerror false put}if
end
count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
{Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
}def
/set_negative
{
Adobe_AGM_Core begin
/AGMCORE_inverting exch def
level2{
currentpagedevice/NegativePrint known{
currentpagedevice/NegativePrint get Adobe_AGM_Core/AGMCORE_inverting get ne{
true begin_feature true{
bdict /NegativePrint Adobe_AGM_Core/AGMCORE_inverting get edict setpagedevice
}end_feature
}if
/AGMCORE_inverting false def
}if
}if
AGMCORE_inverting{
[{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
gsave newpath clippath 1 /setseparationgray where{pop setseparationgray}{setgray}ifelse
/AGMIRS_&fill where {pop AGMIRS_&fill}{fill} ifelse grestore
}if
end
}def
/lw_save_restore_override {
/md where {
pop
md begin
initializepage
/initializepage{}def
/pmSVsetup{} def
/endp{}def
/pse{}def
/psb{}def
/orig_showpage where
{pop}
{/orig_showpage /showpage load def}
ifelse
/showpage {orig_showpage gR} def
end
}if
}def
/pscript_showpage_override {
/NTPSOct95 where
{
begin
showpage
save
/showpage /restore load def
/restore {exch pop}def
end
}if
}def
/driver_media_override
{
/md where {
pop
md /initializepage known {
md /initializepage {} put
} if
md /rC known {
md /rC {4{pop}repeat} put
} if
}if
/mysetup where {
/mysetup [1 0 0 1 0 0] put
}if
Adobe_AGM_Core /AGMCORE_Default_CTM matrix currentmatrix put
level2
{Adobe_AGM_Core /AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
}def
/driver_check_media_override
{
/PrepsDict where
{pop}
{
Adobe_AGM_Core /AGMCORE_Default_CTM get matrix currentmatrix ne
Adobe_AGM_Core /AGMCORE_Default_PageSize get type /arraytype eq
{
Adobe_AGM_Core /AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
Adobe_AGM_Core /AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
}if
{
Adobe_AGM_Core /AGMCORE_Default_CTM get setmatrix
}if
}ifelse
}def
AGMCORE_err_strings begin
/AGMCORE_bad_environ (Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. ) def
/AGMCORE_color_space_onhost_seps (This job contains colors that will not separate with on-host methods. ) def
/AGMCORE_invalid_color_space (This job contains an invalid color space. ) def
end
end
systemdict /setpacking known
{
setpacking
} if
%%EndResource
%%BeginResource: procset Adobe_CoolType_Core 2.23 0
%%Copyright: Copyright 1997-2003 Adobe Systems Incorporated. All Rights Reserved.
%%Version: 2.23 0
10 dict begin
/Adobe_CoolType_Passthru currentdict def
/Adobe_CoolType_Core_Defined userdict /Adobe_CoolType_Core known def
Adobe_CoolType_Core_Defined
{ /Adobe_CoolType_Core userdict /Adobe_CoolType_Core get def }
if
userdict /Adobe_CoolType_Core 60 dict dup begin put
/Adobe_CoolType_Version 2.23 def
/Level2?
systemdict /languagelevel known dup
{ pop systemdict /languagelevel get 2 ge }
if def
Level2? not
{
/currentglobal false def
/setglobal /pop load def
/gcheck { pop false } bind def
/currentpacking false def
/setpacking /pop load def
/SharedFontDirectory 0 dict def
}
if
currentpacking
true setpacking
/@_SaveStackLevels
{
Adobe_CoolType_Data
begin
@opStackCountByLevel @opStackLevel
2 copy known not
{ 2 copy 3 dict dup /args 7 index 5 add array put put get }
{
get dup /args get dup length 3 index lt
{
dup length 5 add array exch
1 index exch 0 exch putinterval
1 index exch /args exch put
}
{ pop }
ifelse
}
ifelse
begin
count 2 sub 1 index lt
{ pop count 1 sub }
if
dup /argCount exch def
dup 0 gt
{
exch 1 index 2 add 1 roll
args exch 0 exch getinterval
astore pop
}
{ pop }
ifelse
count 1 sub /restCount exch def
end
/@opStackLevel @opStackLevel 1 add def
countdictstack 1 sub
@dictStackCountByLevel exch @dictStackLevel exch put
/@dictStackLevel @dictStackLevel 1 add def
end
} bind def
/@_RestoreStackLevels
{
Adobe_CoolType_Data
begin
/@opStackLevel @opStackLevel 1 sub def
@opStackCountByLevel @opStackLevel get
begin
count restCount sub dup 0 gt
{ { pop } repeat }
{ pop }
ifelse
args 0 argCount getinterval {} forall
end
/@dictStackLevel @dictStackLevel 1 sub def
@dictStackCountByLevel @dictStackLevel get
end
countdictstack exch sub dup 0 gt
{ { end } repeat }
{ pop }
ifelse
} bind def
/@_PopStackLevels
{
Adobe_CoolType_Data
begin
/@opStackLevel @opStackLevel 1 sub def
/@dictStackLevel @dictStackLevel 1 sub def
end
} bind def
/@Raise
{
exch cvx exch errordict exch get exec
stop
} bind def
/@ReRaise
{
cvx $error /errorname get errordict exch get exec
stop
} bind def
/@Stopped
{
0 @#Stopped
} bind def
/@#Stopped
{
@_SaveStackLevels
stopped
{ @_RestoreStackLevels true }
{ @_PopStackLevels false }
ifelse
} bind def
/@Arg
{
Adobe_CoolType_Data
begin
@opStackCountByLevel @opStackLevel 1 sub get /args get exch get
end
} bind def
currentglobal true setglobal
/CTHasResourceForAllBug
Level2?
{
1 dict dup begin
mark
{
(*) { pop stop } 128 string /Category
resourceforall
}
stopped
cleartomark
currentdict eq dup
{ end }
if
not
}
{ false }
ifelse
def
/CTHasResourceStatusBug
Level2?
{
mark
{ /steveamerige /Category resourcestatus }
stopped
{ cleartomark true }
{ cleartomark currentglobal not }
ifelse
}
{ false }
ifelse
def
setglobal
/CTResourceStatus
{
mark 3 1 roll
/Category findresource
begin
({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
{ cleartomark false }
{ { 3 2 roll pop true } { cleartomark false } ifelse }
ifelse
end
} bind def
/CTWorkAroundBugs
{
Level2?
{
/cid_PreLoad /ProcSet resourcestatus
{
pop pop
currentglobal
mark
{
(*)
{
dup /CMap CTHasResourceStatusBug
{ CTResourceStatus }
{ resourcestatus }
ifelse
{
pop dup 0 eq exch 1 eq or
{
dup /CMap findresource gcheck setglobal
/CMap undefineresource
}
{
pop CTHasResourceForAllBug
{ exit }
{ stop }
ifelse
}
ifelse
}
{ pop }
ifelse
}
128 string /CMap resourceforall
}
stopped
{ cleartomark }
stopped pop
setglobal
}
if
}
if
} bind def
/doc_setup
{
Adobe_CoolType_Core
begin
CTWorkAroundBugs
/mov /moveto load def
/nfnt /newencodedfont load def
/mfnt /makefont load def
/sfnt /setfont load def
/ufnt /undefinefont load def
/chp /charpath load def
/awsh /awidthshow load def
/wsh /widthshow load def
/ash /ashow load def
/sh /show load def
end
userdict /Adobe_CoolType_Data 10 dict dup
begin
/AddWidths? false def
/CC 0 def
/charcode 2 string def
/@opStackCountByLevel 32 dict def
/@opStackLevel 0 def
/@dictStackCountByLevel 32 dict def
/@dictStackLevel 0 def
/InVMFontsByCMap 10 dict def
/InVMDeepCopiedFonts 10 dict def
end put
} bind def
/doc_trailer
{
currentdict Adobe_CoolType_Core eq
{ end }
if
} bind def
/page_setup
{
Adobe_CoolType_Core begin
} bind def
/page_trailer
{
end
} bind def
/unload
{
systemdict /languagelevel known
{
systemdict/languagelevel get 2 ge
{
userdict/Adobe_CoolType_Core 2 copy known
{ undef }
{ pop pop }
ifelse
}
if
}
if
} bind def
/ndf
{
1 index where
{ pop pop pop }
{ dup xcheck { bind } if def }
ifelse
} def
/findfont systemdict
begin
userdict
begin
/globaldict where { /globaldict get begin } if
dup where pop exch get
/globaldict where { pop end } if
end
end
Adobe_CoolType_Core_Defined
{ /systemfindfont exch def }
{
/findfont 1 index def
/systemfindfont exch def
}
ifelse
/undefinefont
{ pop } ndf
/copyfont
{
currentglobal 3 1 roll
1 index gcheck setglobal
dup null eq { 0 } { dup length } ifelse
2 index length add 1 add dict
begin
exch
{
1 index /FID eq
{ pop pop }
{ def }
ifelse
}
forall
dup null eq
{ pop }
{ { def } forall }
ifelse
currentdict
end
exch setglobal
} bind def
/copyarray
{
currentglobal exch
dup gcheck setglobal
dup length array copy
exch setglobal
} bind def
/newencodedfont
{
currentglobal
{
SharedFontDirectory 3 index known
{ SharedFontDirectory 3 index get /FontReferenced known }
{ false }
ifelse
}
{
FontDirectory 3 index known
{ FontDirectory 3 index get /FontReferenced known }
{
SharedFontDirectory 3 index known
{ SharedFontDirectory 3 index get /FontReferenced known }
{ false }
ifelse
}
ifelse
}
ifelse
dup
{
3 index findfont /FontReferenced get
2 index dup type /nametype eq
{findfont}
if ne
{ pop false }
if
}
if
{
pop
1 index findfont
/Encoding get exch
0 1 255
{ 2 copy get 3 index 3 1 roll put }
for
pop pop pop
}
{
dup type /nametype eq
{ findfont }
if
dup dup maxlength 2 add dict
begin
exch
{
1 index /FID ne
{def}
{pop pop}
ifelse
}
forall
/FontReferenced exch def
/Encoding exch dup length array copy def
/FontName 1 index dup type /stringtype eq { cvn } if def dup
currentdict
end
definefont def
}
ifelse
} bind def
/SetSubstituteStrategy
{
$SubstituteFont
begin
dup type /dicttype ne
{ 0 dict }
if
currentdict /$Strategies known
{
exch $Strategies exch
2 copy known
{
get
2 copy maxlength exch maxlength add dict
begin
{ def } forall
{ def } forall
currentdict
dup /$Init known
{ dup /$Init get exec }
if
end
/$Strategy exch def
}
{ pop pop pop }
ifelse
}
{ pop pop }
ifelse
end
} bind def
/scff
{
$SubstituteFont
begin
dup type /stringtype eq
{ dup length exch }
{ null }
ifelse
/$sname exch def
/$slen exch def
/$inVMIndex
$sname null eq
{
1 index $str cvs
dup length $slen sub $slen getinterval cvn
}
{ $sname }
ifelse def
end
{ findfont }
@Stopped
{
dup length 8 add string exch
1 index 0 (BadFont:) putinterval
1 index exch 8 exch dup length string cvs putinterval cvn
{ findfont }
@Stopped
{ pop /Courier findfont }
if
}
if
$SubstituteFont
begin
/$sname null def
/$slen 0 def
/$inVMIndex null def
end
} bind def
/isWidthsOnlyFont
{
dup /WidthsOnly known
{ pop pop true }
{
dup /FDepVector known
{ /FDepVector get { isWidthsOnlyFont dup { exit } if } forall }
{
dup /FDArray known
{ /FDArray get { isWidthsOnlyFont dup { exit } if } forall }
{ pop }
ifelse
}
ifelse
}
ifelse
} bind def
/?str1 256 string def
/?set
{
$SubstituteFont
begin
/$substituteFound false def
/$fontname 4 index def
/$doSmartSub false def
end
3 index
currentglobal false setglobal exch
/CompatibleFonts /ProcSet resourcestatus
{
pop pop
/CompatibleFonts /ProcSet findresource
begin
dup /CompatibleFont currentexception
1 index /CompatibleFont true setexception
1 index /Font resourcestatus
{
pop pop
3 2 roll setglobal
end
exch
dup findfont
/CompatibleFonts /ProcSet findresource
begin
3 1 roll exch /CompatibleFont exch setexception
end
}
{
3 2 roll setglobal
1 index exch /CompatibleFont exch setexception
end
findfont
$SubstituteFont /$substituteFound true put
}
ifelse
}
{ exch setglobal findfont }
ifelse
$SubstituteFont
begin
$substituteFound
{
false
(%%[Using embedded font ) print
5 index ?str1 cvs print
( to avoid the font substitution problem noted earlier.]%%\n) print
}
{
dup /FontName known
{
dup /FontName get $fontname eq
1 index /DistillerFauxFont known not and
/currentdistillerparams where
{ pop false 2 index isWidthsOnlyFont not and }
if
}
{ false }
ifelse
}
ifelse
exch pop
/$doSmartSub true def
end
{
exch pop exch pop exch
2 dict dup /Found 3 index put
exch findfont exch
}
{
exch exec
exch dup findfont
dup /FontType get 3 eq
{
exch ?str1 cvs
dup length 1 sub
-1 0
{
exch dup 2 index get 42 eq
{
exch 0 exch getinterval cvn 4 1 roll 3 2 roll pop
exit
}
{exch pop} ifelse
}for
}
{
exch pop
} ifelse
2 dict dup /Downloaded 6 5 roll put
}
ifelse
dup /FontName 4 index put copyfont definefont pop
} bind def
/?str2 256 string def
/?add
{
1 index type /integertype eq
{ exch true 4 2 }
{ false 3 1 }
ifelse
roll
1 index findfont
dup /Widths known
{
Adobe_CoolType_Data /AddWidths? true put
gsave dup 1000 scalefont setfont
}
if
/Downloaded known
{
exec
exch
{
exch ?str2 cvs exch
findfont /Downloaded get 1 dict begin /Downloaded 1 index def ?str1 cvs length
?str1 1 index 1 add 3 index putinterval
exch length 1 add 1 index add
?str1 2 index (*) putinterval
?str1 0 2 index getinterval cvn findfont
?str1 3 index (+) putinterval
2 dict dup /FontName ?str1 0 6 index getinterval cvn put
dup /Downloaded Downloaded put end copyfont
dup /FontName get exch definefont pop pop pop
}
{
pop
}
ifelse
}
{
pop
exch
{
findfont
dup /Found get
dup length exch ?str1 cvs pop
?str1 1 index (+) putinterval
?str1 1 index 1 add 4 index ?str2 cvs putinterval
?str1 exch 0 exch 5 4 roll ?str2 cvs length 1 add add getinterval cvn
1 dict exch 1 index exch /FontName exch put copyfont
dup /FontName get exch definefont pop
}
{
pop
}
ifelse
}
ifelse
Adobe_CoolType_Data /AddWidths? get
{ grestore Adobe_CoolType_Data /AddWidths? false put }
if
} bind def
/?sh
{
currentfont /Downloaded known { exch } if pop
} bind def
/?chp
{
currentfont /Downloaded known { pop } { false chp } ifelse
} bind def
/?mv
{
currentfont /Downloaded known { moveto pop pop } { pop pop moveto } ifelse
} bind def
setpacking
userdict /$SubstituteFont 25 dict put
1 dict
begin
/SubstituteFont
dup $error exch 2 copy known
{ get }
{ pop pop { pop /Courier } bind }
ifelse def
/currentdistillerparams where dup
{
pop pop
currentdistillerparams /CannotEmbedFontPolicy 2 copy known
{ get /Error eq }
{ pop pop false }
ifelse
}
if not
{
countdictstack array dictstack 0 get
begin
userdict
begin
$SubstituteFont
begin
/$str 128 string def
/$fontpat 128 string def
/$slen 0 def
/$sname null def
/$match false def
/$fontname null def
/$substituteFound false def
/$inVMIndex null def
/$doSmartSub true def
/$depth 0 def
/$fontname null def
/$italicangle 26.5 def
/$dstack null def
/$Strategies 10 dict dup
begin
/$Type3Underprint
{
currentglobal exch false setglobal
11 dict
begin
/UseFont exch
$WMode 0 ne
{
dup length dict copy
dup /WMode $WMode put
/UseFont exch definefont
}
if def
/FontName $fontname dup type /stringtype eq { cvn } if def
/FontType 3 def
/FontMatrix [ .001 0 0 .001 0 0 ] def
/Encoding 256 array dup 0 1 255 { /.notdef put dup } for pop def
/FontBBox [ 0 0 0 0 ] def
/CCInfo 7 dict dup
begin
/cc null def
/x 0 def
/y 0 def
end def
/BuildChar
{
exch
begin
CCInfo
begin
1 string dup 0 3 index put exch pop
/cc exch def
UseFont 1000 scalefont setfont
cc stringwidth /y exch def /x exch def
x y setcharwidth
$SubstituteFont /$Strategy get /$Underprint get exec
0 0 moveto cc show
x y moveto
end
end
} bind def
currentdict
end
exch setglobal
} bind def
/$GetaTint
2 dict dup
begin
/$BuildFont
{
dup /WMode known
{ dup /WMode get }
{ 0 }
ifelse
/$WMode exch def
$fontname exch
dup /FontName known
{
dup /FontName get
dup type /stringtype eq { cvn } if
}
{ /unnamedfont }
ifelse
exch
Adobe_CoolType_Data /InVMDeepCopiedFonts get
1 index /FontName get known
{
pop
Adobe_CoolType_Data /InVMDeepCopiedFonts get
1 index get
null copyfont
}
{ $deepcopyfont }
ifelse
exch 1 index exch /FontBasedOn exch put
dup /FontName $fontname dup type /stringtype eq { cvn } if put
definefont
Adobe_CoolType_Data /InVMDeepCopiedFonts get
begin
dup /FontBasedOn get 1 index def
end
} bind def
/$Underprint
{
gsave
x abs y abs gt
{ /y 1000 def }
{ /x -1000 def 500 120 translate }
ifelse
Level2?
{
[ /Separation (All) /DeviceCMYK { 0 0 0 1 pop } ]
setcolorspace
}
{ 0 setgray }
ifelse
10 setlinewidth
x .8 mul
[ 7 3 ]
{
y mul 8 div 120 sub x 10 div exch moveto
0 y 4 div neg rlineto
dup 0 rlineto
0 y 4 div rlineto
closepath
gsave
Level2?
{ .2 setcolor }
{ .8 setgray }
ifelse
fill grestore
stroke
}
forall
pop
grestore
} bind def
end def
/$Oblique
1 dict dup
begin
/$BuildFont
{
currentglobal exch dup gcheck setglobal
null copyfont
begin
/FontBasedOn
currentdict /FontName known
{
FontName
dup type /stringtype eq { cvn } if
}
{ /unnamedfont }
ifelse
def
/FontName $fontname dup type /stringtype eq { cvn } if def
/currentdistillerparams where
{ pop }
{
/FontInfo currentdict /FontInfo known
{ FontInfo null copyfont }
{ 2 dict }
ifelse
dup
begin
/ItalicAngle $italicangle def
/FontMatrix FontMatrix
[ 1 0 ItalicAngle dup sin exch cos div 1 0 0 ]
matrix concatmatrix readonly
end
4 2 roll def
def
}
ifelse
FontName currentdict
end
definefont
exch setglobal
} bind def
end def
/$None
1 dict dup
begin
/$BuildFont {} bind def
end def
end def
/$Oblique SetSubstituteStrategy
/$findfontByEnum
{
dup type /stringtype eq { cvn } if
dup /$fontname exch def
$sname null eq
{ $str cvs dup length $slen sub $slen getinterval }
{ pop $sname }
ifelse
$fontpat dup 0 (fonts/*) putinterval exch 7 exch putinterval
/$match false def
$SubstituteFont /$dstack countdictstack array dictstack put
mark
{
$fontpat 0 $slen 7 add getinterval
{ /$match exch def exit }
$str filenameforall
}
stopped
{
cleardictstack
currentdict
true
$SubstituteFont /$dstack get
{
exch
{
1 index eq
{ pop false }
{ true }
ifelse
}
{ begin false }
ifelse
}
forall
pop
}
if
cleartomark
/$slen 0 def
$match false ne
{ $match (fonts/) anchorsearch pop pop cvn }
{ /Courier }
ifelse
} bind def
/$ROS 1 dict dup
begin
/Adobe 4 dict dup
begin
/Japan1 [ /Ryumin-Light /HeiseiMin-W3
/GothicBBB-Medium /HeiseiKakuGo-W5
/HeiseiMaruGo-W4 /Jun101-Light ] def
/Korea1 [ /HYSMyeongJo-Medium /HYGoThic-Medium ] def
/GB1 [ /STSong-Light /STHeiti-Regular ] def
/CNS1 [ /MKai-Medium /MHei-Medium ] def
end def
end def
/$cmapname null def
/$deepcopyfont
{
dup /FontType get 0 eq
{
1 dict dup /FontName /copied put copyfont
begin
/FDepVector FDepVector copyarray
0 1 2 index length 1 sub
{
2 copy get $deepcopyfont
dup /FontName /copied put
/copied exch definefont
3 copy put pop pop
}
for
def
currentdict
end
}
{ $Strategies /$Type3Underprint get exec }
ifelse
} bind def
/$buildfontname
{
dup /CIDFont findresource /CIDSystemInfo get
begin
Registry length Ordering length Supplement 8 string cvs
3 copy length 2 add add add string
dup 5 1 roll dup 0 Registry putinterval
dup 4 index (-) putinterval
dup 4 index 1 add Ordering putinterval
4 2 roll add 1 add 2 copy (-) putinterval
end
1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch
anchorsearch
{ pop pop 3 2 roll putinterval cvn /$cmapname exch def }
{ pop pop pop pop pop }
ifelse
length
$str 1 index (-) putinterval 1 add
$str 1 index $cmapname $fontpat cvs putinterval
$cmapname length add
$str exch 0 exch getinterval cvn
} bind def
/$findfontByROS
{
/$fontname exch def
$ROS Registry 2 copy known
{
get Ordering 2 copy known
{ get }
{ pop pop [] }
ifelse
}
{ pop pop [] }
ifelse
false exch
{
dup /CIDFont resourcestatus
{
pop pop
save
1 index /CIDFont findresource
dup /WidthsOnly known
{ dup /WidthsOnly get }
{ false }
ifelse
exch pop
exch restore
{ pop }
{ exch pop true exit }
ifelse
}
{ pop }
ifelse
}
forall
{ $str cvs $buildfontname }
{
false (*)
{
save exch
dup /CIDFont findresource
dup /WidthsOnly known
{ dup /WidthsOnly get not }
{ true }
ifelse
exch /CIDSystemInfo get
dup /Registry get Registry eq
exch /Ordering get Ordering eq and and
{ exch restore exch pop true exit }
{ pop restore }
ifelse
}
$str /CIDFont resourceforall
{ $buildfontname }
{ $fontname $findfontByEnum }
ifelse
}
ifelse
} bind def
end
end
currentdict /$error known currentdict /languagelevel known and dup
{ pop $error /SubstituteFont known }
if
dup
{ $error }
{ Adobe_CoolType_Core }
ifelse
begin
{
/SubstituteFont
/CMap /Category resourcestatus
{
pop pop
{
$SubstituteFont
begin
/$substituteFound true def
dup length $slen gt
$sname null ne or
$slen 0 gt and
{
$sname null eq
{ dup $str cvs dup length $slen sub $slen getinterval cvn }
{ $sname }
ifelse
Adobe_CoolType_Data /InVMFontsByCMap get
1 index 2 copy known
{
get
false exch
{
pop
currentglobal
{
GlobalFontDirectory 1 index known
{ exch pop true exit }
{ pop }
ifelse
}
{
FontDirectory 1 index known
{ exch pop true exit }
{
GlobalFontDirectory 1 index known
{ exch pop true exit }
{ pop }
ifelse
}
ifelse
}
ifelse
}
forall
}
{ pop pop false }
ifelse
{
exch pop exch pop
}
{
dup /CMap resourcestatus
{
pop pop
dup /$cmapname exch def
/CMap findresource /CIDSystemInfo get { def } forall
$findfontByROS
}
{
128 string cvs
dup (-) search
{
3 1 roll search
{
3 1 roll pop
{ dup cvi }
stopped
{ pop pop pop pop pop $findfontByEnum }
{
4 2 roll pop pop
exch length
exch
2 index length
2 index
sub
exch 1 sub -1 0
{
$str cvs dup length
4 index
0
4 index
4 3 roll add
getinterval
exch 1 index exch 3 index exch
putinterval
dup /CMap resourcestatus
{
pop pop
4 1 roll pop pop pop
dup /$cmapname exch def
/CMap findresource /CIDSystemInfo get { def } forall
$findfontByROS
true exit
}
{ pop }
ifelse
}
for
dup type /booleantype eq
{ pop }
{ pop pop pop $findfontByEnum }
ifelse
}
ifelse
}
{ pop pop pop $findfontByEnum }
ifelse
}
{ pop pop $findfontByEnum }
ifelse
}
ifelse
}
ifelse
}
{ //SubstituteFont exec }
ifelse
/$slen 0 def
end
}
}
{
{
$SubstituteFont
begin
/$substituteFound true def
dup length $slen gt
$sname null ne or
$slen 0 gt and
{ $findfontByEnum }
{ //SubstituteFont exec }
ifelse
end
}
}
ifelse
bind readonly def
Adobe_CoolType_Core /scfindfont /systemfindfont load put
}
{
/scfindfont
{
$SubstituteFont
begin
dup systemfindfont
dup /FontName known
{ dup /FontName get dup 3 index ne }
{ /noname true }
ifelse
dup
{
/$origfontnamefound 2 index def
/$origfontname 4 index def /$substituteFound true def
}
if
exch pop
{
$slen 0 gt
$sname null ne
3 index length $slen gt or and
{
pop dup $findfontByEnum findfont
dup maxlength 1 add dict
begin
{ 1 index /FID eq { pop pop } { def } ifelse }
forall
currentdict
end
definefont
dup /FontName known { dup /FontName get } { null } ifelse
$origfontnamefound ne
{
$origfontname $str cvs print
( substitution revised, using ) print
dup /FontName known
{ dup /FontName get } { (unspecified font) }
ifelse
$str cvs print (.\n) print
}
if
}
{ exch pop }
ifelse
}
{ exch pop }
ifelse
end
} bind def
}
ifelse
end
end
Adobe_CoolType_Core_Defined not
{
Adobe_CoolType_Core /findfont
{
$SubstituteFont
begin
$depth 0 eq
{
/$fontname 1 index dup type /stringtype ne { $str cvs } if def
/$substituteFound false def
}
if
/$depth $depth 1 add def
end
scfindfont
$SubstituteFont
begin
/$depth $depth 1 sub def
$substituteFound $depth 0 eq and
{
$inVMIndex null ne
{ dup $inVMIndex $AddInVMFont }
if
$doSmartSub
{
currentdict /$Strategy known
{ $Strategy /$BuildFont get exec }
if
}
if
}
if
end
} bind put
}
if
}
if
end
/$AddInVMFont
{
exch /FontName 2 copy known
{
get
1 dict dup begin exch 1 index gcheck def end exch
Adobe_CoolType_Data /InVMFontsByCMap get exch
$DictAdd
}
{ pop pop pop }
ifelse
} bind def
/$DictAdd
{
2 copy known not
{ 2 copy 4 index length dict put }
if
Level2? not
{
2 copy get dup maxlength exch length 4 index length add lt
2 copy get dup length 4 index length add exch maxlength 1 index lt
{
2 mul dict
begin
2 copy get { forall } def
2 copy currentdict put
end
}
{ pop }
ifelse
}
if
get
begin
{ def }
forall
end
} bind def
end
end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.19 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.19 0
systemdict /languagelevel known dup
{ currentglobal false setglobal }
{ false }
ifelse
exch
userdict /Adobe_CoolType_Utility 2 copy known
{ 2 copy get dup maxlength 25 add dict copy }
{ 25 dict }
ifelse put
Adobe_CoolType_Utility
begin
/ct_Level2? exch def
/ct_Clone? 1183615869 internaldict dup
/CCRun known not
exch /eCCRun known not
ct_Level2? and or def
ct_Level2?
{ globaldict begin currentglobal true setglobal }
if
/ct_AddStdCIDMap
ct_Level2?
{ {
((Hex) 57 StartData
0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0
7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60
d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8
cc36 74f4 1144 b13b 77) 0 () /SubFileDecode filter cvx exec
} }
{ {
eexec
} }
ifelse bind def
userdict /cid_extensions known
dup { cid_extensions /cid_UpdateDB known and } if
{
cid_extensions
begin
/cid_GetCIDSystemInfo
{
1 index type /stringtype eq
{ exch cvn exch }
if
cid_extensions
begin
dup load 2 index known
{
2 copy
cid_GetStatusInfo
dup null ne
{
1 index load
3 index get
dup null eq
{ pop pop cid_UpdateDB }
{
exch
1 index /Created get eq
{ exch pop exch pop }
{ pop cid_UpdateDB }
ifelse
}
ifelse
}
{ pop cid_UpdateDB }
ifelse
}
{ cid_UpdateDB }
ifelse
end
} bind def
end
}
if
ct_Level2?
{ end setglobal }
if
/ct_UseNativeCapability? systemdict /composefont known def
/ct_MakeOCF 35 dict def
/ct_Vars 25 dict def
/ct_GlyphDirProcs 6 dict def
/ct_BuildCharDict 15 dict dup
begin
/charcode 2 string def
/dst_string 1500 string def
/nullstring () def
/usewidths? true def
end def
ct_Level2? { setglobal } { pop } ifelse
ct_GlyphDirProcs
begin
/GetGlyphDirectory
{
systemdict /languagelevel known
{ pop /CIDFont findresource /GlyphDirectory get }
{
1 index /CIDFont findresource /GlyphDirectory
get dup type /dicttype eq
{
dup dup maxlength exch length sub 2 index lt
{
dup length 2 index add dict copy 2 index
/CIDFont findresource/GlyphDirectory 2 index put
}
if
}
if
exch pop exch pop
}
ifelse
+
} def
/+
{
systemdict /languagelevel known
{
currentglobal false setglobal
3 dict begin
/vm exch def
}
{ 1 dict begin }
ifelse
/$ exch def
systemdict /languagelevel known
{
vm setglobal
/gvm currentglobal def
$ gcheck setglobal
}
if
? { $ begin } if
} def
/? { $ type /dicttype eq } def
/| {
userdict /Adobe_CoolType_Data known
{
Adobe_CoolType_Data /AddWidths? known
{
currentdict Adobe_CoolType_Data
begin
begin
AddWidths?
{
Adobe_CoolType_Data /CC 3 index put
? { def } { $ 3 1 roll put } ifelse
CC charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore
currentfont /Widths get exch CC exch put
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
end
end
}
{ ? { def } { $ 3 1 roll put } ifelse } ifelse
}
{ ? { def } { $ 3 1 roll put } ifelse }
ifelse
} def
/!
{
? { end } if
systemdict /languagelevel known
{ gvm setglobal }
if
end
} def
/: { string currentfile exch readstring pop } executeonly def
end
ct_MakeOCF
begin
/ct_cHexEncoding
[/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
/c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
/c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
/c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
/c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
/c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
/c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
/c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
/c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
/cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
/cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
/cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
/cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
/cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
/ct_CID_STR_SIZE 8000 def
/ct_mkocfStr100 100 string def
/ct_defaultFontMtx [.001 0 0 .001 0 0] def
/ct_1000Mtx [1000 0 0 1000 0 0] def
/ct_raise {exch cvx exch errordict exch get exec stop} bind def
/ct_reraise
{ cvx $error /errorname get (Error: ) print dup ( ) cvs print
errordict exch get exec stop
} bind def
/ct_cvnsi
{
1 index add 1 sub 1 exch 0 4 1 roll
{
2 index exch get
exch 8 bitshift
add
}
for
exch pop
} bind def
/ct_GetInterval
{
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/dst_index 0 def
dup dst_string length gt
{ dup string /dst_string exch def }
if
1 index ct_CID_STR_SIZE idiv
/arrayIndex exch def
2 index arrayIndex get
2 index
arrayIndex ct_CID_STR_SIZE mul
sub
{
dup 3 index add 2 index length le
{
2 index getinterval
dst_string dst_index 2 index putinterval
length dst_index add /dst_index exch def
exit
}
{
1 index length 1 index sub
dup 4 1 roll
getinterval
dst_string dst_index 2 index putinterval
pop dup dst_index add /dst_index exch def
sub
/arrayIndex arrayIndex 1 add def
2 index dup length arrayIndex gt
{ arrayIndex get }
{
pop
exit
}
ifelse
0
}
ifelse
}
loop
pop pop pop
dst_string 0 dst_index getinterval
end
} bind def
ct_Level2?
{
/ct_resourcestatus
currentglobal mark true setglobal
{ /unknowninstancename /Category resourcestatus }
stopped
{ cleartomark setglobal true }
{ cleartomark currentglobal not exch setglobal }
ifelse
{
{
mark 3 1 roll /Category findresource
begin
ct_Vars /vm currentglobal put
({ResourceStatus} stopped) 0 () /SubFileDecode filter cvx exec
{ cleartomark false }
{ { 3 2 roll pop true } { cleartomark false } ifelse }
ifelse
ct_Vars /vm get setglobal
end
}
}
{ { resourcestatus } }
ifelse bind def
/CIDFont /Category ct_resourcestatus
{ pop pop }
{
currentglobal true setglobal
/Generic /Category findresource
dup length dict copy
dup /InstanceType /dicttype put
/CIDFont exch /Category defineresource pop
setglobal
}
ifelse
ct_UseNativeCapability?
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo 3 dict dup begin
/Registry (Adobe) def
/Ordering (Identity) def
/Supplement 0 def
end def
/CMapName /Identity-H def
/CMapVersion 1.000 def
/CMapType 1 def
1 begincodespacerange
<0000>
endcodespacerange
1 begincidrange
<0000> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
if
}
{
/ct_Category 2 dict begin
/CIDFont 10 dict def
/ProcSet 2 dict def
currentdict
end
def
/defineresource
{
ct_Category 1 index 2 copy known
{
get
dup dup maxlength exch length eq
{
dup length 10 add dict copy
ct_Category 2 index 2 index put
}
if
3 index 3 index put
pop exch pop
}
{ pop pop /defineresource /undefined ct_raise }
ifelse
} bind def
/findresource
{
ct_Category 1 index 2 copy known
{
get
2 index 2 copy known
{ get 3 1 roll pop pop}
{ pop pop /findresource /undefinedresource ct_raise }
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/resourcestatus
{
ct_Category 1 index 2 copy known
{
get
2 index known
exch pop exch pop
{
0 -1 true
}
{
false
}
ifelse
}
{ pop pop /findresource /undefined ct_raise }
ifelse
} bind def
/ct_resourcestatus /resourcestatus load def
}
ifelse
/ct_CIDInit 2 dict
begin
/ct_cidfont_stream_init
{
{
dup (Binary) eq
{
pop
null
currentfile
ct_Level2?
{
{ cid_BYTE_COUNT () /SubFileDecode filter }
stopped
{ pop pop pop }
if
}
if
/readstring load
exit
}
if
dup (Hex) eq
{
pop
currentfile
ct_Level2?
{
{ null exch /ASCIIHexDecode filter /readstring }
stopped
{ pop exch pop (>) exch /readhexstring }
if
}
{ (>) exch /readhexstring }
ifelse
load
exit
}
if
/StartData /typecheck ct_raise
}
loop
cid_BYTE_COUNT ct_CID_STR_SIZE le
{
2 copy cid_BYTE_COUNT string exch exec
pop
1 array dup
3 -1 roll
0 exch put
}
{
cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi
dup array exch 2 sub 0 exch 1 exch
{
2 copy
5 index
ct_CID_STR_SIZE
string
6 index exec
pop
put
pop
}
for
2 index
cid_BYTE_COUNT ct_CID_STR_SIZE mod string
3 index exec
pop
1 index exch
1 index length 1 sub
exch put
}
ifelse
cid_CIDFONT exch /GlyphData exch put
2 index null eq
{
pop pop pop
}
{
pop /readstring load
1 string exch
{
3 copy exec
pop
dup length 0 eq
{
pop pop pop pop pop
true exit
}
if
4 index
eq
{
pop pop pop pop
false exit
}
if
}
loop
pop
}
ifelse
} bind def
/StartData
{
mark
{
currentdict
dup /FDArray get 0 get /FontMatrix get
0 get 0.001 eq
{
dup /CDevProc known not
{
/CDevProc 1183615869 internaldict /stdCDevProc 2 copy known
{ get }
{
pop pop
{ pop pop pop pop pop 0 -1000 7 index 2 div 880 }
}
ifelse
def
}
if
}
{
/CDevProc
{
pop pop pop pop pop
0
1 cid_temp /cid_CIDFONT get
/FDArray get 0 get
/FontMatrix get 0 get div
7 index 2 div
1 index 0.88 mul
} def
}
ifelse
/cid_temp 15 dict def
cid_temp
begin
/cid_CIDFONT exch def
3 copy pop
dup /cid_BYTE_COUNT exch def 0 gt
{
ct_cidfont_stream_init
FDArray
{
/Private get
dup /SubrMapOffset known
{
begin
/Subrs SubrCount array def
Subrs
SubrMapOffset
SubrCount
SDBytes
ct_Level2?
{
currentdict dup /SubrMapOffset undef
dup /SubrCount undef
/SDBytes undef
}
if
end
/cid_SD_BYTES exch def
/cid_SUBR_COUNT exch def
/cid_SUBR_MAP_OFFSET exch def
/cid_SUBRS exch def
cid_SUBR_COUNT 0 gt
{
GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
0 1 cid_SUBR_COUNT 1 sub
{
exch 1 index
1 add
cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add
GlyphData exch cid_SD_BYTES ct_GetInterval
0 cid_SD_BYTES ct_cvnsi
cid_SUBRS 4 2 roll
GlyphData exch
4 index
1 index
sub
ct_GetInterval
dup length string copy put
}
for
pop
}
if
}
{ pop }
ifelse
}
forall
}
if
cleartomark pop pop
end
CIDFontName currentdict /CIDFont defineresource pop
end end
}
stopped
{ cleartomark /StartData ct_reraise }
if
} bind def
currentdict
end def
/ct_saveCIDInit
{
/CIDInit /ProcSet ct_resourcestatus
{ true }
{ /CIDInitC /ProcSet ct_resourcestatus }
ifelse
{
pop pop
/CIDInit /ProcSet findresource
ct_UseNativeCapability?
{ pop null }
{ /CIDInit ct_CIDInit /ProcSet defineresource pop }
ifelse
}
{ /CIDInit ct_CIDInit /ProcSet defineresource pop null }
ifelse
ct_Vars exch /ct_oldCIDInit exch put
} bind def
/ct_restoreCIDInit
{
ct_Vars /ct_oldCIDInit get dup null ne
{ /CIDInit exch /ProcSet defineresource pop }
{ pop }
ifelse
} bind def
/ct_BuildCharSetUp
{
1 index
begin
CIDFont
begin
Adobe_CoolType_Utility /ct_BuildCharDict get
begin
/ct_dfCharCode exch def
/ct_dfDict exch def
CIDFirstByte ct_dfCharCode add
dup CIDCount ge
{ pop 0 }
if
/cid exch def
{
GlyphDirectory cid 2 copy known
{ get }
{ pop pop nullstring }
ifelse
dup length FDBytes sub 0 gt
{
dup
FDBytes 0 ne
{ 0 FDBytes ct_cvnsi }
{ pop 0 }
ifelse
/fdIndex exch def
dup length FDBytes sub FDBytes exch getinterval
/charstring exch def
exit
}
{
pop
cid 0 eq
{ /charstring nullstring def exit }
if
/cid 0 def
}
ifelse
}
loop
} def
/ct_SetCacheDevice
{
0 0 moveto
dup stringwidth
3 -1 roll
true charpath
pathbbox
0 -1000
7 index 2 div 880
setcachedevice2
0 0 moveto
} def
/ct_CloneSetCacheProc
{
1 eq
{
stringwidth
pop -2 div -880
0 -1000 setcharwidth
moveto
}
{
usewidths?
{
currentfont /Widths get cid
2 copy known
{ get exch pop aload pop }
{ pop pop stringwidth }
ifelse
}
{ stringwidth }
ifelse
setcharwidth
0 0 moveto
}
ifelse
} def
/ct_Type3ShowCharString
{
ct_FDDict fdIndex 2 copy known
{ get }
{
currentglobal 3 1 roll
1 index gcheck setglobal
ct_Type1FontTemplate dup maxlength dict copy
begin
FDArray fdIndex get
dup /FontMatrix 2 copy known
{ get }
{ pop pop ct_defaultFontMtx }
ifelse
/FontMatrix exch dup length array copy def
/Private get
/Private exch def
/Widths rootfont /Widths get def
/CharStrings 1 dict dup /.notdef
dup length string copy put def
currentdict
end
/ct_Type1Font exch definefont
dup 5 1 roll put
setglobal
}
ifelse
dup /CharStrings get 1 index /Encoding get
ct_dfCharCode get charstring put
rootfont /WMode 2 copy known
{ get }
{ pop pop 0 }
ifelse
exch
1000 scalefont setfont
ct_str1 0 ct_dfCharCode put
ct_str1 exch ct_dfSetCacheProc
ct_SyntheticBold
{
currentpoint
ct_str1 show
newpath
moveto
ct_str1 true charpath
ct_StrokeWidth setlinewidth
stroke
}
{ ct_str1 show }
ifelse
} def
/ct_Type4ShowCharString
{
ct_dfDict ct_dfCharCode charstring
FDArray fdIndex get
dup /FontMatrix get dup ct_defaultFontMtx ct_matrixeq not
{ ct_1000Mtx matrix concatmatrix concat }
{ pop }
ifelse
/Private get
Adobe_CoolType_Utility /ct_Level2? get not
{
ct_dfDict /Private
3 -1 roll
{ put }
1183615869 internaldict /superexec get exec
}
if
1183615869 internaldict
Adobe_CoolType_Utility /ct_Level2? get
{ 1 index }
{ 3 index /Private get mark 6 1 roll }
ifelse
dup /RunInt known
{ /RunInt get }
{ pop /CCRun }
ifelse
get exec
Adobe_CoolType_Utility /ct_Level2? get not
{ cleartomark }
if
} bind def
/ct_BuildCharIncremental
{
{
Adobe_CoolType_Utility /ct_MakeOCF get begin
ct_BuildCharSetUp
ct_ShowCharString
}
stopped
{ stop }
if
end
end
end
end
} bind def
/BaseFontNameStr (BF00) def
/ct_Type1FontTemplate 14 dict
begin
/FontType 1 def
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/PaintType 0 def
currentdict
end def
/BaseFontTemplate 11 dict
begin
/FontMatrix [0.001 0 0 0.001 0 0] def
/FontBBox [-250 -250 1250 1250] def
/Encoding ct_cHexEncoding def
/BuildChar /ct_BuildCharIncremental load def
ct_Clone?
{
/FontType 3 def
/ct_ShowCharString /ct_Type3ShowCharString load def
/ct_dfSetCacheProc /ct_CloneSetCacheProc load def
/ct_SyntheticBold false def
/ct_StrokeWidth 1 def
}
{
/FontType 4 def
/Private 1 dict dup /lenIV 4 put def
/CharStrings 1 dict dup /.notdef put def
/PaintType 0 def
/ct_ShowCharString /ct_Type4ShowCharString load def
}
ifelse
/ct_str1 1 string def
currentdict
end def
/BaseFontDictSize BaseFontTemplate length 5 add def
/ct_matrixeq
{
true 0 1 5
{
dup 4 index exch get exch 3 index exch get eq and
dup not
{ exit }
if
}
for
exch pop exch pop
} bind def
/ct_makeocf
{
15 dict
begin
exch /WMode exch def
exch /FontName exch def
/FontType 0 def
/FMapType 2 def
dup /FontMatrix known
{ dup /FontMatrix get /FontMatrix exch def }
{ /FontMatrix matrix def }
ifelse
/bfCount 1 index /CIDCount get 256 idiv 1 add
dup 256 gt { pop 256} if def
/Encoding
256 array 0 1 bfCount 1 sub { 2 copy dup put pop } for
bfCount 1 255 { 2 copy bfCount put pop } for
def
/FDepVector bfCount dup 256 lt { 1 add } if array def
BaseFontTemplate BaseFontDictSize dict copy
begin
/CIDFont exch def
CIDFont /FontBBox known
{ CIDFont /FontBBox get /FontBBox exch def }
if
CIDFont /CDevProc known
{ CIDFont /CDevProc get /CDevProc exch def }
if
currentdict
end
BaseFontNameStr 3 (0) putinterval
0 1 bfCount dup 256 eq { 1 sub } if
{
FDepVector exch
2 index BaseFontDictSize dict copy
begin
dup /CIDFirstByte exch 256 mul def
FontType 3 eq
{ /ct_FDDict 2 dict def }
if
currentdict
end
1 index 16
BaseFontNameStr 2 2 getinterval cvrs pop
BaseFontNameStr exch definefont
put
}
for
ct_Clone?
{ /Widths 1 index /CIDFont get /GlyphDirectory get length dict def }
if
FontName
currentdict
end
definefont
ct_Clone?
{
gsave
dup 1000 scalefont setfont
ct_BuildCharDict
begin
/usewidths? false def
currentfont /Widths get
begin
exch /CIDFont get /GlyphDirectory get
{
pop
dup charcode exch 1 index 0 2 index 256 idiv put
1 index exch 1 exch 256 mod put
stringwidth 2 array astore def
}
forall
end
/usewidths? true def
end
grestore
}
{ exch pop }
ifelse
} bind def
/ct_ComposeFont
{
ct_UseNativeCapability?
{
2 index /CMap ct_resourcestatus
{ pop pop exch pop }
{
/CIDInit /ProcSet findresource
begin
12 dict
begin
begincmap
/CMapName 3 index def
/CMapVersion 1.000 def
/CMapType 1 def
exch /WMode exch def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{
dup length string copy
exch pop exch pop
}
{ pop (Identity)}
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000>
endcodespacerange
1 begincidrange
<0000> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
3 2 roll pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
/ct_MakeIdentity
{
ct_UseNativeCapability?
{
1 index /CMap ct_resourcestatus
{ pop pop }
{
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CMapName 2 index def
/CMapVersion 1.000 def
/CMapType 1 def
/CIDSystemInfo 3 dict dup
begin
/Registry (Adobe) def
/Ordering
CMapName ct_mkocfStr100 cvs
(Adobe-) search
{
pop pop
(-) search
{ dup length string copy exch pop exch pop }
{ pop (Identity) }
ifelse
}
{ pop (Identity) }
ifelse
def
/Supplement 0 def
end def
1 begincodespacerange
<0000>
endcodespacerange
1 begincidrange
<0000> 0
endcidrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
}
ifelse
composefont
}
{
exch pop
0 get /CIDFont findresource
ct_makeocf
}
ifelse
} bind def
currentdict readonly pop
end
end
%%EndResource
%%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0
%%Copyright: Copyright 1987-2003 Adobe Systems Incorporated.
%%Version: 1.0 0
userdict /ct_T42Dict 15 dict put
ct_T42Dict begin
/Is2015?
{
version
cvi
2015
ge
} bind def
/AllocGlyphStorage
{
Is2015?
{
pop
}
{
{string} forall
} ifelse
} bind def
/Type42DictBegin
{
25 dict begin
/FontName exch def
/CharStrings 256 dict
begin
/.notdef 0 def
currentdict
end def
/Encoding exch def
/PaintType 0 def
/FontType 42 def
/FontMatrix [1 0 0 1 0 0] def
4 array astore cvx /FontBBox exch def
/sfnts
} bind def
/Type42DictEnd
{
currentdict dup /FontName get exch definefont end
ct_T42Dict exch
dup /FontName get exch put
} bind def
/RD {string currentfile exch readstring pop} executeonly def
/PrepFor2015
{
Is2015?
{
/GlyphDirectory
16
dict def
sfnts 0 get
dup
2 index
(glyx)
putinterval
2 index
(locx)
putinterval
pop
pop
}
{
pop
pop
} ifelse
} bind def
/AddT42Char
{
Is2015?
{
/GlyphDirectory get
begin
def
end
pop
pop
}
{
/sfnts get
4 index
get
3 index
2 index
putinterval
pop
pop
pop
pop
} ifelse
} bind def
end
%%EndResource
Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end
%%BeginResource: procset Adobe_AGM_Image 1.0 0
%%Version: 1.0 0
%%Copyright: Copyright (C) 2000-2003 Adobe Systems, Inc. All Rights Reserved.
systemdict /setpacking known
{
currentpacking
true setpacking
} if
userdict /Adobe_AGM_Image 75 dict dup begin put
/Adobe_AGM_Image_Id /Adobe_AGM_Image_1.0_0 def
/nd{
null def
}bind def
/AGMIMG_&image nd
/AGMIMG_&colorimage nd
/AGMIMG_&imagemask nd
/AGMIMG_mbuf () def
/AGMIMG_ybuf () def
/AGMIMG_kbuf () def
/AGMIMG_c 0 def
/AGMIMG_m 0 def
/AGMIMG_y 0 def
/AGMIMG_k 0 def
/AGMIMG_tmp nd
/AGMIMG_imagestring0 nd
/AGMIMG_imagestring1 nd
/AGMIMG_imagestring2 nd
/AGMIMG_imagestring3 nd
/AGMIMG_imagestring4 nd
/AGMIMG_imagestring5 nd
/AGMIMG_cnt nd
/AGMIMG_fsave nd
/AGMIMG_colorAry nd
/AGMIMG_override nd
/AGMIMG_name nd
/AGMIMG_maskSource nd
/invert_image_samples nd
/knockout_image_samples nd
/img nd
/sepimg nd
/devnimg nd
/idximg nd
/doc_setup
{
Adobe_AGM_Core begin
Adobe_AGM_Image begin
/AGMIMG_&image systemdict/image get def
/AGMIMG_&imagemask systemdict/imagemask get def
/colorimage where{
pop
/AGMIMG_&colorimage /colorimage ldf
}if
end
end
}def
/page_setup
{
Adobe_AGM_Image begin
/AGMIMG_ccimage_exists {/customcolorimage where
{
pop
/Adobe_AGM_OnHost_Seps where
{
pop false
}{
/Adobe_AGM_InRip_Seps where
{
pop false
}{
true
}ifelse
}ifelse
}{
false
}ifelse
}bdf
level2{
/invert_image_samples
{
Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
/Decode [ Decode 1 get Decode 0 get] def
}def
/knockout_image_samples
{
Operator/imagemask ne{
/Decode [1 1] def
}if
}def
}{
/invert_image_samples
{
{1 exch sub} currenttransfer addprocs settransfer
}def
/knockout_image_samples
{
{ pop 1 } currenttransfer addprocs settransfer
}def
}ifelse
/img /imageormask ldf
/sepimg /sep_imageormask ldf
/devnimg /devn_imageormask ldf
/idximg /indexed_imageormask ldf
/_ctype 7 def
currentdict{
dup xcheck 1 index type dup /arraytype eq exch /packedarraytype eq or and{
bind
}if
def
}forall
}def
/page_trailer
{
end
}def
/doc_trailer
{
}def
/imageormask_sys
{
begin
save mark
level2{
currentdict
Operator /imagemask eq{
AGMIMG_&imagemask
}{
use_mask {
level3 {process_mask_L3 AGMIMG_&image}{masked_image_simulation}ifelse
}{
AGMIMG_&image
}ifelse
}ifelse
}{
Width Height
Operator /imagemask eq{
Decode 0 get 1 eq Decode 1 get 0 eq and
ImageMatrix /DataSource load
AGMIMG_&imagemask
}{
BitsPerComponent ImageMatrix /DataSource load
AGMIMG_&image
}ifelse
}ifelse
cleartomark restore
end
}def
/overprint_plate
{
currentoverprint {
0 get dup type /nametype eq {
dup /DeviceGray eq{
pop AGMCORE_black_plate not
}{
/DeviceCMYK eq{
AGMCORE_is_cmyk_sep not
}if
}ifelse
}{
false exch
{
AGMOHS_sepink eq or
} forall
not
} ifelse
}{
pop false
}ifelse
}def
/process_mask_L3
{
dup begin
/ImageType 1 def
end
4 dict begin
/DataDict exch def
/ImageType 3 def
/InterleaveType 3 def
/MaskDict 9 dict begin
/ImageType 1 def
/Width DataDict dup /MaskWidth known {/MaskWidth}{/Width} ifelse get def
/Height DataDict dup /MaskHeight known {/MaskHeight}{/Height} ifelse get def
/ImageMatrix [Width 0 0 Height neg 0 Height] def
/NComponents 1 def
/BitsPerComponent 1 def
/Decode [0 1] def
/DataSource AGMIMG_maskSource def
currentdict end def
currentdict end
}def
/use_mask
{
dup type /dicttype eq
{
dup /Mask known {
dup /Mask get {
level3
{true}
{
dup /MaskWidth known {dup /MaskWidth get 1 index /Width get eq}{true}ifelse exch
dup /MaskHeight known {dup /MaskHeight get 1 index /Height get eq}{true}ifelse
3 -1 roll and
} ifelse
}
{false} ifelse
}
{false} ifelse
}
{false} ifelse
}def
/make_line_source
{
begin
MultipleDataSources {
[
Decode length 2 div cvi {Width string} repeat
]
}{
Width Decode length 2 div mul cvi string
}ifelse
end
}def
/datasource_to_str
{
exch dup type
dup /filetype eq {
pop exch readstring
}{
/arraytype eq {
exec exch copy
}{
pop
}ifelse
}ifelse
pop
}def
/masked_image_simulation
{
3 dict begin
dup make_line_source /line_source xdf
/mask_source AGMIMG_maskSource /LZWDecode filter def
dup /Width get 8 div ceiling cvi string /mask_str xdf
begin
gsave
0 1 translate 1 -1 Height div scale
1 1 Height {
pop
gsave
MultipleDataSources {
0 1 DataSource length 1 sub {
dup DataSource exch get
exch line_source exch get
datasource_to_str
} for
}{
DataSource line_source datasource_to_str
} ifelse
<<
/PatternType 1
/PaintProc [
/pop cvx
<<
/ImageType 1
/Width Width
/Height 1
/ImageMatrix Width 1.0 sub 1 matrix scale 0.5 0 matrix translate matrix concatmatrix
/MultipleDataSources MultipleDataSources
/DataSource line_source
/BitsPerComponent BitsPerComponent
/Decode Decode
>>
/image cvx
] cvx
/BBox [0 0 Width 1]
/XStep Width
/YStep 1
/PaintType 1
/TilingType 2
>>
matrix makepattern set_pattern
<<
/ImageType 1
/Width Width
/Height 1
/ImageMatrix Width 1 matrix scale
/MultipleDataSources false
/DataSource mask_source mask_str readstring pop
/BitsPerComponent 1
/Decode [0 1]
>>
imagemask
grestore
0 1 translate
} for
grestore
end
end
}def
/imageormask
{
begin
SkipImageProc {
currentdict consumeimagedata
}
{
save mark
level2 AGMCORE_host_sep not and{
currentdict
Operator /imagemask eq DeviceN_PS2 not and {
imagemask
}{
AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get /DeviceGray eq and{
[/Separation /Black /DeviceGray {}] setcolorspace
/Decode [ Decode 1 get Decode 0 get ] def
}if
use_mask {
level3 {process_mask_L3 image}{masked_image_simulation}ifelse
}{
DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and
{
Names convert_to_process not {
2 dict begin
/imageDict xdf
/names_index 0 def
gsave
imageDict write_image_file {
Names {
dup (None) ne {
[/Separation 3 -1 roll /DeviceGray {1 exch sub}] setcolorspace
Operator imageDict read_image_file
names_index 0 eq {true setoverprint} if
/names_index names_index 1 add def
}{
pop
} ifelse
} forall
close_image_file
} if
grestore
end
}{
Operator /imagemask eq {
imagemask
}{
image
} ifelse
} ifelse
}{
Operator /imagemask eq {
imagemask
}{
image
} ifelse
} ifelse
}ifelse
}ifelse
}{
Width Height
Operator /imagemask eq{
Decode 0 get 1 eq Decode 1 get 0 eq and
ImageMatrix /DataSource load
/Adobe_AGM_OnHost_Seps where {
pop imagemask
}{
currentgray 1 ne{
currentdict imageormask_sys
}{
currentoverprint not{
1 AGMCORE_&setgray
currentdict imageormask_sys
}{
currentdict ignoreimagedata
}ifelse
}ifelse
}ifelse
}{
BitsPerComponent ImageMatrix
MultipleDataSources{
0 1 NComponents 1 sub{
DataSource exch get
}for
}{
/DataSource load
}ifelse
Operator /colorimage eq{
AGMCORE_host_sep{
MultipleDataSources level2 or NComponents 4 eq and{
AGMCORE_is_cmyk_sep{
MultipleDataSources{
/DataSource [
DataSource 0 get /exec cvx
DataSource 1 get /exec cvx
DataSource 2 get /exec cvx
DataSource 3 get /exec cvx
/AGMCORE_get_ink_data cvx
] cvx def
}{
/DataSource
Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
/DataSource load
filter_cmyk 0 () /SubFileDecode filter def
}ifelse
/Decode [ Decode 0 get Decode 1 get ] def
/MultipleDataSources false def
/NComponents 1 def
/Operator /image def
invert_image_samples
1 AGMCORE_&setgray
currentdict imageormask_sys
}{
currentoverprint not Operator/imagemask eq and{
1 AGMCORE_&setgray
currentdict imageormask_sys
}{
currentdict ignoreimagedata
}ifelse
}ifelse
}{
MultipleDataSources NComponents AGMIMG_&colorimage
}ifelse
}{
true NComponents colorimage
}ifelse
}{
Operator /image eq{
AGMCORE_host_sep{
/DoImage true def
HostSepColorImage{
invert_image_samples
}{
AGMCORE_black_plate not Operator/imagemask ne and{
/DoImage false def
currentdict ignoreimagedata
}if
}ifelse
1 AGMCORE_&setgray
DoImage
{currentdict imageormask_sys} if
}{
use_mask {
level3 {process_mask_L3 image}{masked_image_simulation}ifelse
}{
image
}ifelse
}ifelse
}{
Operator/knockout eq{
pop pop pop pop pop
currentcolorspace overprint_plate not{
knockout_unitsq
}if
}if
}ifelse
}ifelse
}ifelse
}ifelse
cleartomark restore
}ifelse
end
}def
/sep_imageormask
{
/sep_colorspace_dict AGMCORE_gget begin
/MappedCSA CSA map_csa def
begin
SkipImageProc {
currentdict consumeimagedata
}
{
save mark
AGMCORE_avoid_L2_sep_space{
/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
}if
AGMIMG_ccimage_exists
MappedCSA 0 get /DeviceCMYK eq and
currentdict/Components known and
Name () ne and
Name (All) ne and
Operator /image eq and
AGMCORE_producing_seps not and
level2 not and
{
Width Height BitsPerComponent ImageMatrix
[
/DataSource load /exec cvx
{
0 1 2 index length 1 sub{
1 index exch
2 copy get 255 xor put
}for
} /exec cvx
] cvx bind
MappedCSA 0 get /DeviceCMYK eq{
Components aload pop
}{
0 0 0 Components aload pop 1 exch sub
}ifelse
Name findcmykcustomcolor
customcolorimage
}{
AGMCORE_producing_seps not{
level2{
AGMCORE_avoid_L2_sep_space not currentcolorspace 0 get /Separation ne and{
[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
/sep_tint AGMCORE_gget setcolor
}if
currentdict imageormask
}{
currentdict
Operator /imagemask eq{
imageormask
}{
sep_imageormask_lev1
}ifelse
}ifelse
}{
AGMCORE_host_sep{
Operator/knockout eq{
currentdict/ImageMatrix get concat
knockout_unitsq
}{
currentgray 1 ne{
AGMCORE_is_cmyk_sep Name (All) ne and{
level2{
[ /Separation Name [/DeviceGray]
{
sep_colorspace_proc AGMCORE_get_ink_data
1 exch sub
} bind
] AGMCORE_&setcolorspace
/sep_tint AGMCORE_gget AGMCORE_&setcolor
currentdict imageormask_sys
}{
currentdict
Operator /imagemask eq{
imageormask_sys
}{
sep_image_lev1_sep
}ifelse
}ifelse
}{
Operator/imagemask ne{
invert_image_samples
}if
currentdict imageormask_sys
}ifelse
}{
currentoverprint not Name (All) eq or Operator/imagemask eq and{
currentdict imageormask_sys
}{
currentoverprint not
{
gsave
knockout_unitsq
grestore
}if
currentdict consumeimagedata
}ifelse
}ifelse
}ifelse
}{
currentcolorspace 0 get /Separation ne{
[/Separation Name MappedCSA sep_proc_name exch 0 get exch load ] setcolorspace_opt
/sep_tint AGMCORE_gget setcolor
}if
currentoverprint
MappedCSA 0 get /DeviceCMYK eq and
Name inRip_spot_has_ink not and
Name (All) ne and {
imageormask_l2_overprint
}{
currentdict imageormask
}ifelse
}ifelse
}ifelse
}ifelse
cleartomark restore
}ifelse
end
end
}def
/decode_image_sample
{
4 1 roll exch dup 5 1 roll
sub 2 4 -1 roll exp 1 sub div mul add
} bdf
/colorSpaceElemCnt
{
currentcolorspace 0 get dup /DeviceCMYK eq {
pop 4
}
{
/DeviceRGB eq {
pop 3
}{
1
} ifelse
} ifelse
} bdf
/devn_sep_datasource
{
1 dict begin
/dataSource xdf
[
0 1 dataSource length 1 sub {
dup currentdict /dataSource get /exch cvx /get cvx /exec cvx
/exch cvx names_index /ne cvx [ /pop cvx ] cvx /if cvx
} for
] cvx bind
end
} bdf
/devn_alt_datasource
{
11 dict begin
/srcDataStrs xdf
/dstDataStr xdf
/convProc xdf
/origcolorSpaceElemCnt xdf
/origMultipleDataSources xdf
/origBitsPerComponent xdf
/origDecode xdf
/origDataSource xdf
/dsCnt origMultipleDataSources {origDataSource length}{1}ifelse def
/samplesNeedDecoding
0 0 1 origDecode length 1 sub {
origDecode exch get add
} for
origDecode length 2 div div
dup 1 eq {
/decodeDivisor 2 origBitsPerComponent exp 1 sub def
} if
2 origBitsPerComponent exp 1 sub ne
def
[
0 1 dsCnt 1 sub [
currentdict /origMultipleDataSources get {
dup currentdict /origDataSource get exch get dup type
}{
currentdict /origDataSource get dup type
} ifelse
dup /filetype eq {
pop currentdict /srcDataStrs get 3 -1 /roll cvx /get cvx /readstring cvx /pop cvx
}{
/stringtype ne {
/exec cvx
} if
currentdict /srcDataStrs get /exch cvx 3 -1 /roll cvx /xpt cvx
} ifelse
] cvx /for cvx
currentdict /srcDataStrs get 0 /get cvx /length cvx 0 /ne cvx [
0 1 Width 1 sub [
Adobe_AGM_Utils /AGMUTIL_ndx /xddf cvx
currentdict /origMultipleDataSources get {
0 1 dsCnt 1 sub [
Adobe_AGM_Utils /AGMUTIL_ndx1 /xddf cvx
currentdict /srcDataStrs get /AGMUTIL_ndx1 /load cvx /get cvx /AGMUTIL_ndx /load cvx /get cvx
samplesNeedDecoding {
currentdict /decodeDivisor known {
currentdict /decodeDivisor get /div cvx
}{
currentdict /origDecode get /AGMUTIL_ndx1 /load cvx 2 /mul cvx 2 /getinterval cvx /aload cvx /pop cvxs
BitsPerComponent /decode_image_sample load /exec cvx
} ifelse
} if
] cvx /for cvx
}{
Adobe_AGM_Utils /AGMUTIL_ndx1 0 /ddf cvx
currentdict /srcDataStrs get 0 /get cvx /AGMUTIL_ndx /load cvx
currentdict /origDecode get length 2 idiv dup 3 1 /roll cvx /mul cvx /exch cvx /getinterval cvx
[
samplesNeedDecoding {
currentdict /decodeDivisor known {
currentdict /decodeDivisor get /div cvx
}{
currentdict /origDecode get /AGMUTIL_ndx1 /load cvx 2 /mul cvx 2 /getinterval cvx /aload cvx /pop cvx
BitsPerComponent /decode_image_sample load /exec cvx
Adobe_AGM_Utils /AGMUTIL_ndx1 /AGMUTIL_ndx1 /load cvx 1 /add cvx /ddf cvx
} ifelse
} if
] cvx /forall cvx
} ifelse
currentdict /convProc get /exec cvx
currentdict /origcolorSpaceElemCnt get 1 sub -1 0 [
currentdict /dstDataStr get 3 1 /roll cvx /AGMUTIL_ndx /load cvx currentdict /origcolorSpaceElemCnt get /mul cvx /add cvx /exch cvx
currentdict /convProc get /filter_indexed_devn load ne {
255 /mul cvx /cvi cvx
} if
/put cvx
] cvx /for cvx
] cvx /for cvx
currentdict /dstDataStr get
] cvx /if cvx
] cvx bind
end
} bdf
/devn_imageormask
{
/devicen_colorspace_dict AGMCORE_gget begin
/MappedCSA CSA map_csa def
2 dict begin
dup dup
/dstDataStr exch /Width get colorSpaceElemCnt mul string def
/srcDataStrs [ 3 -1 roll begin
currentdict /MultipleDataSources known {MultipleDataSources {DataSource length}{1}ifelse}{1} ifelse
{
Width Decode length 2 div mul cvi string
} repeat
end ] def
begin
SkipImageProc {
currentdict consumeimagedata
}
{
save mark
AGMCORE_producing_seps not {
level3 not {
Operator /imagemask ne {
/DataSource [
DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
colorSpaceElemCnt /devicen_colorspace_dict AGMCORE_gget /TintTransform get
dstDataStr srcDataStrs devn_alt_datasource /exec cvx
] cvx 0 () /SubFileDecode filter def
/MultipleDataSources false def
/Decode colorSpaceElemCnt [ exch {0 1} repeat ] def
} if
}if
currentdict imageormask
}{
AGMCORE_host_sep{
Names convert_to_process {
CSA map_csa 0 get /DeviceCMYK eq {
/DataSource
Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
[
DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
4 /devicen_colorspace_dict AGMCORE_gget /TintTransform get
dstDataStr srcDataStrs devn_alt_datasource /exec cvx
] cvx
filter_cmyk 0 () /SubFileDecode filter def
/MultipleDataSources false def
/Decode [1 0] def
/DeviceGray setcolorspace
currentdict imageormask_sys
}{
AGMCORE_report_unsupported_color_space
AGMCORE_black_plate {
/DataSource [
DataSource Decode BitsPerComponent currentdict /MultipleDataSources known {MultipleDataSources}{false} ifelse
CSA map_csa 0 get /DeviceRGB eq{3}{1}ifelse /devicen_colorspace_dict AGMCORE_gget /TintTransform get
dstDataStr srcDataStrs devn_alt_datasource /exec cvx
] cvx 0 () /SubFileDecode filter def
/MultipleDataSources false def
/Decode colorSpaceElemCnt [ exch {0 1} repeat ] def
currentdict imageormask_sys
}
{
gsave
knockout_unitsq
grestore
currentdict consumeimagedata
} ifelse
} ifelse
}
{
/devicen_colorspace_dict AGMCORE_gget /names_index known {
Operator/imagemask ne{
MultipleDataSources {
/DataSource [ DataSource devn_sep_datasource /exec cvx ] cvx def
/MultipleDataSources false def
}{
/DataSource /DataSource load dstDataStr srcDataStrs 0 get filter_devn def
} ifelse
invert_image_samples
} if
currentdict imageormask_sys
}{
currentoverprint not Operator/imagemask eq and{
currentdict imageormask_sys
}{
currentoverprint not
{
gsave
knockout_unitsq
grestore
}if
currentdict consumeimagedata
}ifelse
}ifelse
}ifelse
}{
currentdict imageormask
}ifelse
}ifelse
cleartomark restore
}ifelse
end
end
end
}def
/imageormask_l2_overprint
{
currentdict
currentcmykcolor add add add 0 eq{
currentdict consumeimagedata
}{
level3{
currentcmykcolor
/AGMIMG_k xdf
/AGMIMG_y xdf
/AGMIMG_m xdf
/AGMIMG_c xdf
Operator/imagemask eq{
[/DeviceN [
AGMIMG_c 0 ne {/Cyan} if
AGMIMG_m 0 ne {/Magenta} if
AGMIMG_y 0 ne {/Yellow} if
AGMIMG_k 0 ne {/Black} if
] /DeviceCMYK {}] setcolorspace
AGMIMG_c 0 ne {AGMIMG_c} if
AGMIMG_m 0 ne {AGMIMG_m} if
AGMIMG_y 0 ne {AGMIMG_y} if
AGMIMG_k 0 ne {AGMIMG_k} if
setcolor
}{
/Decode [ Decode 0 get 255 mul Decode 1 get 255 mul ] def
[/Indexed
[
/DeviceN [
AGMIMG_c 0 ne {/Cyan} if
AGMIMG_m 0 ne {/Magenta} if
AGMIMG_y 0 ne {/Yellow} if
AGMIMG_k 0 ne {/Black} if
]
/DeviceCMYK {
AGMIMG_k 0 eq {0} if
AGMIMG_y 0 eq {0 exch} if
AGMIMG_m 0 eq {0 3 1 roll} if
AGMIMG_c 0 eq {0 4 1 roll} if
}
]
255
{
255 div
mark exch
dup dup dup
AGMIMG_k 0 ne{
/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop
counttomark 1 roll
}{
pop
}ifelse
AGMIMG_y 0 ne{
/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop
counttomark 1 roll
}{
pop
}ifelse
AGMIMG_m 0 ne{
/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop
counttomark 1 roll
}{
pop
}ifelse
AGMIMG_c 0 ne{
/sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop
counttomark 1 roll
}{
pop
}ifelse
counttomark 1 add -1 roll pop
}
] setcolorspace
}ifelse
imageormask_sys
}{
write_image_file{
currentcmykcolor
0 ne{
[/Separation /Black /DeviceGray {}] setcolorspace
gsave
/Black
[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 1 roll pop pop pop 1 exch sub} /exec cvx]
cvx modify_halftone_xfer
Operator currentdict read_image_file
grestore
}if
0 ne{
[/Separation /Yellow /DeviceGray {}] setcolorspace
gsave
/Yellow
[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 2 roll pop pop pop 1 exch sub} /exec cvx]
cvx modify_halftone_xfer
Operator currentdict read_image_file
grestore
}if
0 ne{
[/Separation /Magenta /DeviceGray {}] setcolorspace
gsave
/Magenta
[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {4 3 roll pop pop pop 1 exch sub} /exec cvx]
cvx modify_halftone_xfer
Operator currentdict read_image_file
grestore
}if
0 ne{
[/Separation /Cyan /DeviceGray {}] setcolorspace
gsave
/Cyan
[{1 exch sub /sep_tint AGMCORE_gget mul} /exec cvx MappedCSA sep_proc_name cvx exch pop {pop pop pop 1 exch sub} /exec cvx]
cvx modify_halftone_xfer
Operator currentdict read_image_file
grestore
} if
close_image_file
}{
imageormask
}ifelse
}ifelse
}ifelse
} def
/indexed_imageormask
{
begin
save mark
currentdict
AGMCORE_host_sep{
Operator/knockout eq{
/indexed_colorspace_dict AGMCORE_gget dup /CSA known {
/CSA get map_csa
}{
/CSD get get_csd /Names get
} ifelse
overprint_plate not{
knockout_unitsq
}if
}{
Indexed_DeviceN {
/devicen_colorspace_dict AGMCORE_gget /names_index known {
indexed_image_lev2_sep
}{
currentoverprint not{
knockout_unitsq
}if
currentdict consumeimagedata
} ifelse
}{
AGMCORE_is_cmyk_sep{
Operator /imagemask eq{
imageormask_sys
}{
level2{
indexed_image_lev2_sep
}{
indexed_image_lev1_sep
}ifelse
}ifelse
}{
currentoverprint not{
knockout_unitsq
}if
currentdict consumeimagedata
}ifelse
}ifelse
}ifelse
}{
level2{
Indexed_DeviceN {
/indexed_colorspace_dict AGMCORE_gget begin
CSD get_csd begin
}{
/indexed_colorspace_dict AGMCORE_gget begin
CSA map_csa 0 get /DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and {
[/Indexed [/DeviceN [/Cyan /Magenta /Yellow /Black] /DeviceCMYK {}] HiVal Lookup]
setcolorspace
} if
end
} ifelse
imageormask
Indexed_DeviceN {
end
end
} if
}{
Operator /imagemask eq{
imageormask
}{
indexed_imageormask_lev1
}ifelse
}ifelse
}ifelse
cleartomark restore
end
}def
/indexed_image_lev2_sep
{
/indexed_colorspace_dict AGMCORE_gget begin
begin
Indexed_DeviceN not {
currentcolorspace
dup 1 /DeviceGray put
dup 3
currentcolorspace 2 get 1 add string
0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
{
dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
}for
put setcolorspace
} if
currentdict
Operator /imagemask eq{
AGMIMG_&imagemask
}{
use_mask {
level3 {process_mask_L3 AGMIMG_&image}{masked_image_simulation}ifelse
}{
AGMIMG_&image
}ifelse
}ifelse
end end
}def
/OPIimage
{
dup type /dicttype ne{
10 dict begin
/DataSource xdf
/ImageMatrix xdf
/BitsPerComponent xdf
/Height xdf
/Width xdf
/ImageType 1 def
/Decode [0 1 def]
currentdict
end
}if
dup begin
/NComponents 1 cdndf
/MultipleDataSources false cdndf
/SkipImageProc {false} cdndf
/HostSepColorImage false cdndf
/Decode [
0
currentcolorspace 0 get /Indexed eq{
2 BitsPerComponent exp 1 sub
}{
1
}ifelse
] cdndf
/Operator /image cdndf
end
/sep_colorspace_dict AGMCORE_gget null eq{
imageormask
}{
gsave
dup begin invert_image_samples end
sep_imageormask
grestore
}ifelse
}def
/cachemask_level2
{
3 dict begin
/LZWEncode filter /WriteFilter xdf
/readBuffer 256 string def
/ReadFilter
currentfile
0 (%EndMask) /SubFileDecode filter
/ASCII85Decode filter
/RunLengthDecode filter
def
{
ReadFilter readBuffer readstring exch
WriteFilter exch writestring
not {exit} if
}loop
WriteFilter closefile
end
}def
/cachemask_level3
{
currentfile
<<
/Filter [ /SubFileDecode /ASCII85Decode /RunLengthDecode ]
/DecodeParms [ << /EODCount 0 /EODString (%EndMask) >> null null ]
/Intent 1
>>
/ReusableStreamDecode filter
}def
/spot_alias
{
/mapto_sep_imageormask
{
dup type /dicttype ne{
12 dict begin
/ImageType 1 def
/DataSource xdf
/ImageMatrix xdf
/BitsPerComponent xdf
/Height xdf
/Width xdf
/MultipleDataSources false def
}{
begin
}ifelse
/Decode [/customcolor_tint AGMCORE_gget 0] def
/Operator /image def
/HostSepColorImage false def
/SkipImageProc {false} def
currentdict
end
sep_imageormask
}bdf
/customcolorimage
{
Adobe_AGM_Image/AGMIMG_colorAry xddf
/customcolor_tint AGMCORE_gget
bdict
/Name AGMIMG_colorAry 4 get
/CSA [ /DeviceCMYK ]
/TintMethod /Subtractive
/TintProc null
/MappedCSA null
/NComponents 4
/Components [ AGMIMG_colorAry aload pop pop ]
edict
setsepcolorspace
mapto_sep_imageormask
}ndf
Adobe_AGM_Image/AGMIMG_&customcolorimage /customcolorimage load put
/customcolorimage
{
Adobe_AGM_Image/AGMIMG_override false put
dup 4 get map_alias{
/customcolor_tint AGMCORE_gget exch setsepcolorspace
pop
mapto_sep_imageormask
}{
AGMIMG_&customcolorimage
}ifelse
}bdf
}def
/snap_to_device
{
6 dict begin
matrix currentmatrix
dup 0 get 0 eq 1 index 3 get 0 eq and
1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
{
1 1 dtransform 0 gt exch 0 gt /AGMIMG_xSign? exch def /AGMIMG_ySign? exch def
0 0 transform
AGMIMG_ySign? {floor 0.1 sub}{ceiling 0.1 add} ifelse exch
AGMIMG_xSign? {floor 0.1 sub}{ceiling 0.1 add} ifelse exch
itransform /AGMIMG_llY exch def /AGMIMG_llX exch def
1 1 transform
AGMIMG_ySign? {ceiling 0.1 add}{floor 0.1 sub} ifelse exch
AGMIMG_xSign? {ceiling 0.1 add}{floor 0.1 sub} ifelse exch
itransform /AGMIMG_urY exch def /AGMIMG_urX exch def
[AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY] concat
}{
}ifelse
end
} def
level2 not{
/colorbuf
{
0 1 2 index length 1 sub{
dup 2 index exch get
255 exch sub
2 index
3 1 roll
put
}for
}def
/tint_image_to_color
{
begin
Width Height BitsPerComponent ImageMatrix
/DataSource load
end
Adobe_AGM_Image begin
/AGMIMG_mbuf 0 string def
/AGMIMG_ybuf 0 string def
/AGMIMG_kbuf 0 string def
{
colorbuf dup length AGMIMG_mbuf length ne
{
dup length dup dup
/AGMIMG_mbuf exch string def
/AGMIMG_ybuf exch string def
/AGMIMG_kbuf exch string def
} if
dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
}
addprocs
{AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf} true 4 colorimage
end
} def
/sep_imageormask_lev1
{
begin
MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
{
255 mul round cvi GrayLookup exch get
} currenttransfer addprocs settransfer
currentdict imageormask
}{
/sep_colorspace_dict AGMCORE_gget/Components known{
MappedCSA 0 get /DeviceCMYK eq{
Components aload pop
}{
0 0 0 Components aload pop 1 exch sub
}ifelse
Adobe_AGM_Image/AGMIMG_k xddf
Adobe_AGM_Image/AGMIMG_y xddf
Adobe_AGM_Image/AGMIMG_m xddf
Adobe_AGM_Image/AGMIMG_c xddf
AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
{AGMIMG_k mul 1 exch sub} currenttransfer addprocs settransfer
currentdict imageormask
}{
currentcolortransfer
{AGMIMG_k mul 1 exch sub} exch addprocs 4 1 roll
{AGMIMG_y mul 1 exch sub} exch addprocs 4 1 roll
{AGMIMG_m mul 1 exch sub} exch addprocs 4 1 roll
{AGMIMG_c mul 1 exch sub} exch addprocs 4 1 roll
setcolortransfer
currentdict tint_image_to_color
}ifelse
}{
MappedCSA 0 get /DeviceGray eq {
{255 mul round cvi ColorLookup exch get 0 get} currenttransfer addprocs settransfer
currentdict imageormask
}{
MappedCSA 0 get /DeviceCMYK eq {
currentcolortransfer
{255 mul round cvi ColorLookup exch get 3 get 1 exch sub} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 2 get 1 exch sub} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 1 get 1 exch sub} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 0 get 1 exch sub} exch addprocs 4 1 roll
setcolortransfer
currentdict tint_image_to_color
}{
currentcolortransfer
{pop 1} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 2 get} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 1 get} exch addprocs 4 1 roll
{255 mul round cvi ColorLookup exch get 0 get} exch addprocs 4 1 roll
setcolortransfer
currentdict tint_image_to_color
}ifelse
}ifelse
}ifelse
}ifelse
end
}def
/sep_image_lev1_sep
{
begin
/sep_colorspace_dict AGMCORE_gget/Components known{
Components aload pop
Adobe_AGM_Image/AGMIMG_k xddf
Adobe_AGM_Image/AGMIMG_y xddf
Adobe_AGM_Image/AGMIMG_m xddf
Adobe_AGM_Image/AGMIMG_c xddf
{AGMIMG_c mul 1 exch sub}
{AGMIMG_m mul 1 exch sub}
{AGMIMG_y mul 1 exch sub}
{AGMIMG_k mul 1 exch sub}
}{
{255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
{255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
{255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
{255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
}ifelse
AGMCORE_get_ink_data currenttransfer addprocs settransfer
currentdict imageormask_sys
end
}def
/indexed_imageormask_lev1
{
/indexed_colorspace_dict AGMCORE_gget begin
begin
currentdict
MappedCSA 0 get dup /DeviceRGB eq exch /DeviceCMYK eq or has_color not and{
{HiVal mul round cvi GrayLookup exch get HiVal div} currenttransfer addprocs settransfer
imageormask
}{
MappedCSA 0 get /DeviceGray eq {
{HiVal mul round cvi Lookup exch get HiVal div} currenttransfer addprocs settransfer
imageormask
}{
MappedCSA 0 get /DeviceCMYK eq {
currentcolortransfer
{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
{4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub} exch addprocs 4 1 roll
setcolortransfer
tint_image_to_color
}{
currentcolortransfer
{pop 1} exch addprocs 4 1 roll
{3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div} exch addprocs 4 1 roll
{3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div} exch addprocs 4 1 roll
{3 mul HiVal mul round cvi Lookup exch get HiVal div} exch addprocs 4 1 roll
setcolortransfer
tint_image_to_color
}ifelse
}ifelse
}ifelse
end end
}def
/indexed_image_lev1_sep
{
/indexed_colorspace_dict AGMCORE_gget begin
begin
{4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}
{4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
{4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
{4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
AGMCORE_get_ink_data currenttransfer addprocs settransfer
currentdict imageormask_sys
end end
}def
}if
end
systemdict /setpacking known
{
setpacking
} if
%%EndResource
currentdict Adobe_AGM_Utils eq {end} if
%%EndProlog
%%BeginSetup
Adobe_AGM_Utils begin
2 2010 Adobe_AGM_Core/doc_setup get exec
Adobe_CoolType_Core/doc_setup get exec
Adobe_AGM_Image/doc_setup get exec
currentdict Adobe_AGM_Utils eq {end} if
%%EndSetup
%%Page: (webworka [Converted].eps) 1
%%EndPageComments
%%BeginPageSetup
/currentdistillerparams where
{pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse
{ userdict /AI11_PDFMark5 /cleartomark load put
userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put}
{ userdict /AI11_PDFMark5 /pdfmark load put
userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse
[/NamespacePush AI11_PDFMark5
[/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5
[{ai_metadata_stream_123}
currentfile 0 (% &&end XMP packet marker&&)
/SubFileDecode filter AI11_ReadMetadata_PDFMark5
-
-
-
- Adobe PDF library 4.800
-
-
-
-
-
-
-
-
-
- 2004-03-31T05:29:33Z
- 2001-12-11T00:25:08-08:00
- Adobe Illustrator 9.0.1
-
-
-
- JPEG
- 256
- 240
- /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9QW9vbm3iJiSvBf2R4Yq
qfVrf/fSf8CMVd9Wt/8AfSf8CMVd9Wt/99J/wIxV31a3/wB9J/wIxV31a3/30n/AjFXfVrf/AH0n
/AjFXfVrf/fSf8CMVd9Wt/8AfSf8CMVd9Wt/99J/wIxV31a3/wB9J/wIxV31a3/30n/AjFXfVrf/
AH0n/AjFXfVrf/fSf8CMVd9Wt/8AfSf8CMVd9Wt/99J/wIxV31a3/wB9J/wIxV31a3/30n/AjFXf
Vrf/AH0n/AjFXfVrf/fSf8CMVd9Wt/8AfSf8CMVd9Wt/99J/wIxV31a3/wB9J/wIxV31a3/30n/A
jFXfVrf/AH0n/AjFXfVrf/fSf8CMVd9Wt/8AfSf8CMVd9Wt/99J/wIxV31a3/wB9J/wIxV31a3/3
0n/AjFXfVrf/AH0n/AjFVO4t7cW8pESV4N+yPDFVS2/3ni/1F/ViqrirsVdirsVdirsVdirsVdir
sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUrn/AHnl/wBRv1Yq62/3ni/1
F/ViqrirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd
irsVUrn/AHnl/wBRv1Yq62/3ni/1F/ViqrirsVdirsVdirsVdirsVdirsVdirHfPnnvy/wCSPLs2
u65KyW0bCOKKMBpZpWqVijUkVY0J67AEnLMWMzNBXix/5yf88tbnXY/y7uz5UHxG/wCU9PTB/vPX
EHpAU+iv7WZn5OPLi9SLez+QPP3l/wA8+XYtc0SRmgZjFPBIAssMygFopFBI5AMDsaEGuYeXEYGi
lh/5qfn1pPknVIfL+nadL5g80XAUjTbdiojEg/d82VZGLvWqoqkkdaVFbsOmMxZNRVjWjf8AOTV9
Yaxbab+YnlS78rR3m0F/IsojFSN3jljjbgKjkylqeGWS0YIuB4kW9PX81vyza6NovmrSjOCRwF5B
1HavKlfpzG8CfcUvLdR/5ya1nVdVurP8vPJ135ktLJqTagBKVYDusUUblQ1PhLNU/wAuZI0YAucq
RbLfyo/PXRvPV7caLdWEuh+ZrMM02l3B5cgho/puVjbkh+0jKCPfelWfTGAvmEvT8xldirsVdirs
VdirsVdirsVdirsVUrn/AHnl/wBRv1Yq62/3ni/1F/ViqrirsVdirsVdirsVdirsVdirsVdir55/
5y1CLc+RJ9QV28ux6hMNVAqVIJgIBA/aMSy0+nM/Q/xVzpBe8C90U6L9cE1v+hfq/qevyT6t9W4V
5cvsenw+imYVG/NL5L/Jz85PI3kLzZ5zWVbpfLeqXbS6LHbRBwkUMs3pAqzqVLRSKB8t82mo08px
j3jmhF/k95r0rzH+b3nLWkYx6zrKTP5bNyVSURNOOUK/EwE31YBRxboGpmN2jjyDT8MOYZ464t2V
/ng8Ft+VGqQeYqrdXE1v+gYbj+/+tLKpleJW+IKIOYc9KGnUjNZ2HDKJm74fNtzmPRJ7v8gvKkf/
ADj7/iNdLkXzeumJqb3JnmqBQTOphLentDXbhWubkaqXi1fpunHem/8AOMl15cl/KXTIdHMYuYGk
GrxrT1RdNIxLS9/iTjxJ/ZoO2Y2sB8Q2kMG86TWN3/zld5WHlwo+o20aLrjwbgFBMZRIVI+MWxAN
fYe2XY7GA3y6IfSGa9LsVdirsVdirsVdirsVdirsVdiqlc/7zy/6jfqxV1t/vPF/qL+rFVXFXYq7
FXYq7FXYq7FXYq7FXYq7FUm83eUNA826FcaHrtsLmwuKEipV0dd1kjYbqynofoO1Rk8eQwNhXiv/
AEKNbCtivnPUh5dL8/0V6Y8a15ep6XL39HMz8914RaKes6F+V/kLRdBtdEttFtJ7K0qUN3DHcSM7
fbkd5FNXbufoG1BmLLNMm7Sx38yvyC8l+d0t5qNo2qWcYitb2xVVAjUkqjxUCsqkmlOJ98sw6qUP
MKxnyz/zir5es9Zg1XzPrd15ne1IMFtcJ6cJ4mqLKGeZnUfy8gD3FNssnrSRURSKe4MiMhRlDIw4
lSKgg7UpmEl4b5g/5xU0KbV5tR8q6/eeWBckme1gX1YgGNWWPjJAyL/klmA+W2ZsdaaqQ4kUzD8r
PyR8p/l4JrqyaW/1q5X07jVLmnPgSCUiRdkUkAnqT3PTKs2olk58kvRMx1dirsVdirsVdirsVdir
sVdirsVUrn/eeX/Ub9WKutv954v9Rf1Yqq4q7FXYql2vav8AonTzeel61GVeHLh9r3o2UajN4ceK
rZwhxGkfG3NFalOQBp88uBYJdpes/Xr/AFC09H0/qDqnPly58iwrSgp9nKcWfjlKNfSzlCgD3r9c
1X9F6dJe+l63AqPT5ca8iB1o3j4Yc+Xw48VWiEeI0gbrzPMLtLOxsWvboxLNKiuECBgDQsQfEZTP
VHi4Yx4jVsxj2smmv055j/6sLf8ASQn/ADTj4+X+Z9q8Ee9Th80aidVt9OuNKMEs5B/vg5VO7EKv
QUyMdXLjETGifNJxirtB6VrevCa/SKyfUUS6kVZDME4AHZAGByvDnyXKo8Xq72UoR23pMP055j/6
sLf9JCf805d4+X+Z9rDgj3pbrn5gvo+ha3qF1pjLeaPZyX31JpQBKsa8uIlCtxr/AKpy3S5vEyeG
RwyROFCwbCZ+RPNH+KvKGl+Yvq31P9JwCf6rz9X06kjjz4x8un8ozKyQ4ZEdzWk2s/mV+jfzU0Dy
F+jvV/TlrNdfpL1uPpejHM/H0fTbnX0KV5jr7ZOOG4Gd8lZldT+hazT8eXpIz8a0rxBNK5UArx4/
85GRP5E0DXrfy/JPrnma7nsdJ0GK4Dlngk9MsZjGm3Jk6J+19OZf5T1EXsOqEaPPf/OQBFf+VYw/
9xmz/wCasj4WL+f9iUv1j86/zJ8qQxan51/L5tO0EyLFcX1rqFvdvGXNFJSPl+JHzyUdPCW0Zb+5
CceaPzqvbXzefKnk/wAszebNUhtY768MN1HaxRRTKrJ8bpJUlZEO9PtDrkIacGPFI8ISh/8AlaH5
y/8Alp5/+4xbf9UcPg4/5/2Kxn8z/wAx/PFtp3kvUtUtJ/JLza8sGpWYvFmV7NPTZnlljWNeBBaq
kdstw4okyA9WyHpv/K5Pyq/6mzS/+kmP+uY35fJ3FKTSfnl5evPPmg+U/LKw+Yf0v6rXl9aXI4Wi
RKW5MojdXqqsac1p9OT/ACxETKW1Kj/zim8tW/luC58w+Z9U8r2cVyoiudGneC5nlZGCw/BHKzgi
rcQO1cjp+K9gJe9Xk/reQP8Ay4H5kf8AIy+/7JMyqn/Nh9n60IzyZqerJ+Zvl+08na75q1/Q5xOf
Mn+I1ne3iiEZ9Jkkmii4Nyr0G54iu5GDIBwHiEQelK+iM16XYq7FVK5/3nl/1G/Virrb/eeL/UX9
WKquKuxV2KoLWdLi1TT5bORuAehWQCpVgag02yrNiGSJiWUJcJtK49M83RxrGuqQlUAVSYQTQbCu
2Y4xZwK4h8mfFDuQ9r5Z1+znmurbVE+sXR5XXKIcS1SQR18fAZCGlyRJIlueezI5InYhUu/L/mDU
IxbahqcbWhYNIscQDHjuBXbJT0+WYqUtvcgTiNwFe98vXq6l+kNJu1tJXjWKVHTmpVQADvXsoyU9
NLj4oGjSBkFUQ19Q84f9XOD/AJEj+mPh5/5w+S8UO5bZaJrsOpi9mu4HZyBcMsQDsgp8PKm3TBDB
kE+IkeeymcaqlK30DzDZzXJsr+KKK4meYq0fI1Y+JHhkY6fLEnhkNzfJJnE8wr/UPOH/AFc4P+RI
/pk/Dz/zh8kcUO5CXHkn9KW2qw67ci6Gq2kljL6ahOMUq8WI/wArw2yenwyhk8SRuSJzBFBgGg/l
f+eHlnS4dD0Hz1Zfoey5JYrc6ejSLGWLcSSJDsSafEfuzayzYpGzHf3tSBvPyR/NzUPNFp5yvPPV
t/ifTFEOmslgvoLCQ6upAKr8Qlev7s1r16UkNRjEeER9J81Ti88k/wDOQ95aTWk3nvTkhuEaKVo9
PRXCOOLcTw2NDkBkwj+E/NKnqP8Azj0kfk3yvpWg621hr3lG4lvNN1iSESK807iWTnCWIAaRUp9q
gFKHEar1EkbSQiv8Kf8AORn/AFPOl/8AcOT/AJowceH+afmlLNf/ACh/N7zhZpo3m7ztay6A8qS3
cFnYpHLJ6Z5KoaiU3Hj70OSjnxwNxjv70Mq8tflhPon5ra95yjuov0bqtjbWNrYKrepELeKCIcmO
xH+j5XPNxYxHqEvQsx1ee/m3+V8vn1vLqC4hitdIv1u7yCdC6zw/CHioP5gCN8yMGbgvzCph/wAq
b/Kr/qU9L/6Ro/6ZH8xk7yrG9S/InSYPzA8t+afKkdnoMWkGQ39tBEyfWAwou0ZVdgzBvEbZYNSe
Axlvaoz8wvy483+Z7DyrJb6xZx675dulvpLya2b0JZ0UcWEAZ6fEK0rkcWWMSdtiql+gP+chP+pr
0X/uHv8A1w8WLuPzVHaFov51w6vay615j0q70pHBu7eCyeOV0p0RydjkZSx1sDavQcoV2KuxVSuf
955f9Rv1Yq62/wB54v8AUX9WKquKuxV2KuxV2KuxV2KuxVJ9R8uC91uy1X9J6hbCzFG0+3uDHaT0
PJfXioeVCf2SK9GqNsmJ0KoKgpvJCy2N1afp3WY/rWpNqhuEvCJoyzBvqkT8TwtRSgiHbD4m/Icq
/HmqbaxpT6lDBEt9dWHoTxXBks3VGf0m5CJyyvWNjTmv7Q2O1QYxlSoGbymkp1cnVtTX9MGItwu3
X6sIv2bOg/cB/wBvjucPHy2GyoqfRGliuIhqN7GlxZCx+CUBoyA4+sRuVLrP+8+3XsNtsAl5Koy+
Wy99ql4uq6hG+pwegIVn/c21ECepaxsrLHJty5UO5w8ew2GyqsOgpG1s7X17LNbWZsjI9w1JAeP7
+WNeMTTDjtJwrufoHEqnF5cEeopffpPUHKaeNO+rPcEwGjcvrJjpT6z29Tww8e1UOaqun6J9T0M6
T9fvLmqyp9fuJud3+9Zm5erQbpzom2wAwGVm6VDW/lWO3u9IuI9V1MppEUkItpLp5YroSLx53fqc
3mdftKxbY4TPnsN1Q8/kyWbSbbTj5h1iNra7a8N9HcRrcy8+fKCVxFRof3povH4aLxI4jCMm90FV
rrymtxLrUv6X1SFta9D4YrplWzNsoUGyWhEPqU5SdeZ64BPlsNvxurUXlIRy6LJ+mdUc6KsoKtdE
remYAM16vGkpUrVKUC1NABQB4+ew3/GyrI/JvCARfpzVmpqX6U5tdVc7U+qFuP8AvL/xX+OHxPIc
q/HmrIsrV2KuxV2KuxV2KuxV2KqVz/vPL/qN+rFXW3+88X+ov6sVVcVdirsVdirsVdirsVdirsVd
irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqlc/7zy/6jfqxV1t/vPF/qL+r
FVXFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
qpXP+88v+o36sVdbf7zxf6i/qxVVxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2
KuxV2KuxV2KuxV2KuxV2KuxV2KqVz/vPL/qN+rFXW3+88X+ov6sVVcVdirsVdirsVdirsVdirsVd
irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqlc/7zy/6jfqxV1t/vPF/qL+r
FVXFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXiOt/mZ5zWDzb5otNZ0+w0vylqM2nJ5bubcNLdi3Kh
mlnMgkR5jy9HgtKda75mxwx9MaNyHNCnqX5t6r5z80vpXkHzFBpem2FjFeXN79Vju5ppZmIaMpMy
okUC09RhuCfDcVZIDFASlEyJNbMoi0HYfmv+bGvaT5ZQJpWgW3ma7lsIfNKFrlUktBJ6jLbyhI63
DQn0eTkHp7i44McSeZroxei/lr5j8yX9/wCZNC125t9Tm8u3cVrFrVpH6KXIlgWUq8as6LLFypIF
NATSmUZoAAEbX0SznKFdirsVdirsVdirsVdirsVdirsVdirsVUrn/eeX/Ub9WKutv954v9Rf1Yqq
4q7FXYq7FXYq7FXYq7FXYq7FUI2p2wt7u4PLhZFxNsK1jUMab+ByvxRRP81lwnbzWX+s2VhHFJcF
gkwZlKiuyIXNfoGRyZ4wAJ6rGBKnPrXoRGWWyuVQUFeMZNSaAUD16nBLPQsxP4+KRC+rGX8peR9W
14+ZLvypFc6zFI0YvjHFJyaFuCuQzKGccBRitR2OTx62ZjQEqtTCurWo6Z+W3nTXf0Pq2iQ32o6X
Al8PrMKgok080PDkDyP7y3Yuv2Tt1y/Dmlw8UTQuvkxlGlHXdS/LfUvy0mvdT0lLrynZTParYCBB
we2u2sB6KKyhKSA8SrA8fuyyImJ0D6vwULPKHmfy5Z6Ikfk7yhqA0H1JBBLY29pFDM0bGJ5QHnjk
Ykx/adeRw5IEn1SFqiNI/N3RdbZl0HStU1Vooo5bsW8MS+gZSwWOX1pYvj/dtULXBLAY8yAqifzk
0Gz8yXOi6/byaD6VnBdwvesDK5mkljKGOATKvH0Q1fUNeXQY/lyRY3VkXlPzroXmuG+uNFkee1sL
o2UlyV4o8qxpK3p1+IqBKBUgb5XPGY81T7IK7FXYq7FXYq7FXYq7FXYq7FVK5/3nl/1G/Virrb/e
eL/UX9WKquKuxV2KuxV2KuxV2KuxV2KuxVBT6NpNxMZp7OGWVqcnZFJNNhWo3yqWCEjZAtkJkdUP
NoVrGn+461tIZWZVlaWHmphJHqqArJuUrTenjhjgxj+EKZnvQcHloiIie105pecNGS3dV4Dj64oX
Y8j8XDfbate4OmxfzU+JLvd/hydwzTQ6bJcOKtILZ1BkKxciQZWNC/qnr0KjfiSxOnxE3wo45d6X
a1+Xek60iHVdI0W9lt43jsmnsjJw5KSoqXrx9U8mUdvffMjFLwxUbA8mJNoaH8pPKNs8V1Z+XdBg
1G3kaSGYaeOK8K+gQA4IdTxLNXftTqJ+PI8yfmqne/lF5XvLye6m8vaA807SSSSPYFmaR2lIZiHW
poYuXiQ/8w4ozyA5n5qnWieWJtFZv0ZbaVYpL6KXAtLR4eccPoqq0WSg4p64Xw5J/K3KEp3ztU7j
0zT49Qm1JLeNb+4jSGe6CgSPHEWKIzdSFLtT55CzVKstdG0m0vbq+tbSKG8vWD3dwigPKwVVq7Dc
/Cij6MTIkUqNwK7FXYq7FXYq7FXYq7FXYq7FVK5/3nl/1G/Virrb/eeL/UX9WKquKuxV2KuxV2Ku
xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSuf955f9Rv1Yq6
2/3ni/1F/ViqrirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs
VdirsVdirsVUrn/eeX/Ub9WKutv954v9Rf1Yqq4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVK5/3nl/1G/Virrb/eeL/UX9WKquKuxV2KuxV2Ku
xV2KuxV2KtMyqpZiFVRVmOwAHc4kqkz+cvLaMVN6CRsaJIw+8KRmKdbiHX72zwpdzX+NPLP/AC2f
8k5f+aMH57F3/YV8GXc7/Gnln/ls/wCScv8AzRj+exd/2FfBl3O/xp5Z/wCWz/knL/zRj+exd/2F
fBl3O/xp5Z/5bP8AknL/AM0Y/nsXf9hXwZdzv8aeWf8Als/5Jy/80Y/nsXf9hXwZdzv8aeWf+Wz/
AJJy/wDNGP57F3/YV8GXc7/Gnln/AJbP+Scv/NGP57F3/YV8GXc7/Gnln/ls/wCScv8AzRj+exd/
2FfBl3IrT/MGj6hIYrS5WSQb8CGRiPYOFr9GW49RCZqJRKBHNMcuYOxV2KuxV2KuxV2KuxV2KuxV
Suf955f9Rv1Yq62/3ni/1F/ViqrirsVdirsVdirsVdirsVdiqB1uzmvNJurWA8ZZYyE7VPWn09Mq
zwMoEDmygaNsRb6wtoltPpN7OqCIfVRFSKN4QOTJIFct6lPi27nfNab4aMJHltW23n5uR1uwiL7U
byaa3KaPdSRqWMry23J1DCi+lyD04n4tqCo6ZPJlkSPRL/S/ciMR3hLL62uLq5rJpd/Kn1cQm5eF
hM0gcP6h2K9Ph+WY+SJkd4yO3Ot/f+hnE0OYaWxjScyjQr2QMqJ6TxsFXjxq4ov2m49Pc4jGAb4J
fJeLzCtBEYgf9wl07MGUubYCisjLsAtDuwO/hkoiv4JfJBPmFF7IPEYzot4S1R6ywcGXp0CrQ9O+
RMLFcEvkm/MLU0+OORZBol9IAqIYnjYKeJXk1QtasFP34BjAN8EvkvF5hf8AVWCN/uDuZXIPplrc
oFbiQpPBfiHIioOHg/oH5Lfmh47bVPqk8M2iyu0jxshWB4wAnKteIB35DICM+EgwPyTYvmj9D0S+
l121uo7GWwt4Apl9QFRyVaNx5fEeZy7BgkcgIiYgMJzHDV29AzcuK7FXYq7FXYq7FXYq7FXYq7FV
K5/3nl/1G/Virrb/AHni/wBRf1Yqq4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
7FXYq7FXYq7FXYq7FXYq7FXYq7FVK5/3nl/1G/Virrb/AHni/wBRf1Yqq4q7FXYq7FXYq7FXYq7F
XYqk3nDzRYeVfLGo+Yb9We106EzPGn23NQqItdqsxC75PHAykAFeI3357/m6ulrqtloOiyJI1oW0
hbiWfULaPUeP1JrhFaMATeovEjxFQMzBpsd0Sf0bc0Jtqf5jfn/YtDTQfL1zHIGaSaO6kjWMRr6j
lvrEsDOqx1flEHXiCQSBkRixHrJWJ6//AM5K/mpo0lW0TRr+za0XUI9RsjczWz2rzi2EofmpAE59
M8gCG2y2OkgepVDW/wDzk9+cFzfvp9v5RtJb6OKK4ktkiumkWG49P0pCokqFf146H/KGE6PGBfEt
plY/n9+el6ZPQ8nWPGJJJHdhOq/uoXnK8jNTkY4XKr1NNsidLiH8SoG7/wCcl/zltLOS9ufJ9pHa
RAmW4MdyY1AIB5MJSB9sZIaTGduJVC0/5yk/Nu8vEsrTynZz3csUU8dvHFdM7RTlFicKJKkOZUC+
NRidFjG9raOT/nIn88ZDSLyTbSnlxPpxXL0PFm+LjKabITv4YPyuL+cq7/oYf87f0dc6h/g+yMFp
JDFMFW4Z+VwJDHRFlLEfuWqabfTj+VxXXEqc/lz/AM5K69qvnaz8qecNBj0m41LgtpNF6sbI8qep
CJYpSzUlBHFge42puIZdIBHiibpX0BmAl2KuxV2KuxV2KuxV2KuxV2KqVz/vPL/qN+rFXW3+88X+
ov6sVVcVdirsVdirsVdirsVdirsVSvzP5d03zJ5fv9C1NS1jqMLQTcDRgG6MpNaMrUZfcZKEzEgh
XlUf5FefrW2jttM/MQ2CRRx263UOkQJeyQQDjBFPdpMk0oiTZamntmV+ZgecftVT1T8hfP8Aqd9p
19c/mIq3GlvLLaejotvEnqzrxmkkjSdUlaVdm5qaio6E4x1MACOHn5oQt3/zjn5xudX/AEo/n6NZ
xaLpyQJolutqtmjB0t1tRP6Hpq6hgvD7Qr1yQ1cQK4ftVWk/IDz88hl/5WMI5mCK8sWi20UjpFx4
Ru8cys8a8FpGxK7DbYYPzUP5v2q3F/zj/wCeoYxFB+YEMMXJmMUWgWUaMXieF+arIA3KORlIbscf
zUf5v2lVIf8AOO/nVV4R+f4ooTXnbxaFaRwyV2/exJKsclKbc1NO2P5qP837VXyf84+ee3KsPzEE
UiekEmh0S2hkCwOrxIJI5lfgjRrRK8dhtj+aj/N+1VKT/nHPzm1tPbJ5/jt4LqOSC5S20K0t/Uim
ieF0cwzRlgUlYUPTqN8P5uP837VSrTf+cTNd0yyurLTvzAmtLa9eKS6SHT+BdrcOIiWW7DfD6r7A
98kdcCbMft/YtMn8mf8AOOo0jzjY+avMXmSXzHf6ZGkdgHtltqGJPTiaV/UmeX01+zU9hUnK8mru
PCBVpey5hq7FXYq7FXYq7FXYq7FXYq7FVK5/3nl/1G/Virrb/eeL/UX9WKquKuxV2KuxV2KuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSuf955f9Rv1Yq62/3n
i/1F/ViqrirsVdirsVdirsVdirsVdirGfzK80XXlXyJrXmC0hFxd6fbNJbxEEr6hIRWcChKqW5N7
DLMMOKQCvmSTzd+cWo2YurbzfqC37paXExMMNvYNHegN/o8q0Q+gG+MUHQ06ZL81jjKjEcPqHO5e
nvHn0bPD2Ruraz+ZVnc2UA8/6nFLdtLHFBLCjSytAnNvSCGlSNgrH7VBXfKcOuEgT4Y2rrsL7/xy
ZHFXVJbnzT+elxfPa6J5k1S6uRpqaqulyJ/uQKNcJbmJYIVlLSD1PVpt+7BOxFM2GmninEkiO0uG
xy5Xz+z3tU40mMKf85PNqkljca/eWMaQ20q6hdLPFayPdGEC3ikNuTJcRm4o8SryqjgVIobv3NXT
FMtM0z/nIq6SSW584XtpGFmWFXstSSWSaK1muURIp7O3d1b6vxJj5MCRRWO2RJwj+H7v1qlt1/0M
tDYvcxeY764mUOY9PFvfwXcxTjyEEF1ZwPLQPU8KgAGtNqyHg3y+79aqdu//ADlA97DbXOtX+nxT
Q2sovrxZobZXu5Iolt2laCgmRp6OnUcW6kYnwK5BUQV/5yLS3nubjzjPZ21ssks819BqVkoihhkn
kdfrVjCZOEcLErHyf/Jwfuf5v3frVKLPzj+bV95e1PVtP/MdLx9NntIGhEv1SMi7E5q0+oJZKCv1
fZVDVr2pvM48YIBjz/HS1ZN+W35o/mzov5n6J5Y8z6kNcsNcW3Y8eE6hLuESxywXKKof0+Q58GZN
mAr1yrNhxmBlEVSvqrNYl2KuxV2KuxV2KuxV2KuxV2KqVz/vPL/qN+rFXW3+88X+ov6sVVcVdirs
VdirsVdirsVdirsVUbyztb20ms7uFLi0uY2iuIJAGR43HFlZTsQQaHCDW6vK7z/nGD8qbn4Pq99F
bKxaG0S8mMMfLrwVy5H35kDVTBva/cqnL/zi3+VkzI8q6jI0QCxs95IxUL0CkjYDEaqQ5V8lWzf8
4rflRPK0s0d/LK+7SPduzH5kiuGOsmBQr5Ks/wChUPyi/wCWe9/6Sm/ph/O5Fp3/AEKh+UX/ACz3
v/SU39MfzuRad/0Kh+UX/LPe/wDSU39MfzuRad/0Kh+UX/LPe/8ASU39MfzuRad/0Kh+UX/LPe/9
JTf0x/O5Fp3/AEKh+UX/ACz3v/SU39MfzuRaZJ5H/Iz8uPJep/pXR9PZtTUFYbu5laZ4gw4t6YPw
qSDQmlabVpleTUzmKJ2Vn+UK7FXYq7FXYq7FXYq7FXYq7FVK5/3nl/1G/ViqXa3cXFt5Vvrm2uBa
XFvZSyw3RiM4jeOIsrmEbyAEbqNz0GKvOTr3ndpLeOPztp6CQss88mnlow8fqF1VgI1T4Yjx5k1+
E7hhVVGeUPNHmHXZ7q0sfM9tqF2sbvHE1lJEIvSmhjf1HMUQciki7KteVaDjsqn9npX5mqJRd63a
PyCekUhUMpEkRep9MBv3ayD7IrX9n9lVQfRPzWaONR5jtEb0gHYWyGkgG5NY/jqe44j/ACe4VZTo
tpqlrYCLU746jec3LXJjSIFSx4AJGFAotPHfviqPxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
V2KuxV2KuxV2KuxV2KuxV2KuxVSuf955f9Rv1YqgNYeRPLF68cksMi2UpSa3XnMhERIaJe7jqo8c
VeTWF9eS20Nx+nfNUy38FLS6FjNRWmrJyaNGZRRCBVh8jzxVXs5daNi8UvmDzNDKYnVJHsGc7BiQ
pHPi5CfDzYnkR8XH4Qqmeg6L5j1ya6MHmXWbGOKSKSRbu1lgDqzF+EXqTswpxIPbpUMNiq9TxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSuf8AeeX/AFG/
ViqyCZVhjVlcMqgEcH6gfLFV/wBYj8H/AOAf+mKu+sR+D/8AAP8A0xV31iPwf/gH/pirvrEfg/8A
wD/0xV31iPwf/gH/AKYq76xH4P8A8A/9MVd9Yj8H/wCAf+mKu+sR+D/8A/8ATFXfWI/B/wDgH/pi
rvrEfg//AAD/ANMVd9Yj8H/4B/6Yq76xH4P/AMA/9MVd9Yj8H/4B/wCmKu+sR+D/APAP/TFXfWI/
B/8AgH/pirvrEfg//AP/AExV31iPwf8A4B/6Yq76xH4P/wAA/wDTFXfWI/B/+Af+mKu+sR+D/wDA
P/TFXfWI/B/+Af8ApirvrEfg/wDwD/0xV31iPwf/AIB/6Yq76xH4P/wD/wBMVd9Yj8H/AOAf+mKu
+sR+D/8AAP8A0xV31iPwf/gH/pirvrEfg/8AwD/0xV31iPwf/gH/AKYq76xH4P8A8A/9MVWTzK0M
iqrlmUgDg/Uj5Yq//9k=
-
-
-
-
-
-
- uuid:dce97bfe-82d3-11d8-9b09-000a95b0d6d2
-
-
-
- application/postscript
-
-
- webwork
-
-
-
-
-
-
-
% &&end XMP packet marker&&
[{ai_metadata_stream_123}
<>
/PUT AI11_PDFMark5
[/Document
1 dict begin /Metadata {ai_metadata_stream_123} def
currentdict end /BDC AI11_PDFMark5
Adobe_AGM_Utils begin
Adobe_AGM_Core/page_setup get exec
Adobe_CoolType_Core/page_setup get exec
Adobe_AGM_Image/page_setup get exec
%%EndPageSetup
Adobe_AGM_Core/AGMCORE_save save ddf
1 -1 scale 0 -576 translate
[1 0 0 1 0 0 ] concat
% page clip
gsave
newpath
gsave % PSGState
0 0 mo
0 576 li
618.334 576 li
618.334 0 li
clp
[1 0 0 1 0 0 ] concat
617.834 575.5 mo
0.5 575.5 li
0.5 0.5 li
617.834 0.5 li
617.834 575.5 li
false sop
/0
[/DeviceCMYK] add_csa
0 0 0 0 cmyk
f
1 lw
0 lc
0 lj
4 ml
[] 0 dsh
true sadj
617.834 575.5 mo
0.5 575.5 li
0.5 0.5 li
617.834 0.5 li
617.834 575.5 li
cp
0.188236 0.129412 0.101961 0.0117648 cmyk
@
363.461 98.4517 mo
360.123 98.4517 357.089 97.2378 354.812 94.9605 cv
352.537 92.6885 351.171 89.4981 351.171 86.3126 cv
351.171 82.9732 352.537 79.9395 354.812 77.6636 cv
357.089 75.3863 360.123 74.024 363.461 74.024 cv
366.647 74.024 369.681 75.3863 372.11 77.6636 cv
374.387 79.9395 375.601 82.9732 375.601 86.3126 cv
375.601 92.9898 370.138 98.4517 363.461 98.4517 cv
cp
312.175 98.4517 mo
310.297 98.4517 308.445 97.9834 306.752 97.169 cv
305.636 96.5801 304.585 95.8692 303.681 94.9649 cv
301.407 92.6885 300.041 89.6553 300.041 86.3174 cv
300.041 83.1304 301.407 79.9395 303.681 77.6685 cv
305.958 75.3912 308.992 74.1768 312.331 74.1768 cv
315.648 74.1768 318.664 75.5298 320.86 77.7081 cv
323.111 79.9795 324.466 82.9927 324.466 86.3126 cv
324.466 92.9898 318.853 98.4517 312.175 98.4517 cv
cp
269.694 94.9649 mo
267.418 97.2422 264.383 98.605 261.045 98.605 cv
257.858 98.605 254.672 97.2422 252.396 94.9649 cv
250.121 92.6885 248.906 89.6553 248.906 86.3174 cv
248.906 83.1304 250.121 79.9395 252.396 77.6685 cv
254.672 75.3912 257.858 74.1768 261.045 74.1768 cv
267.721 74.1768 273.335 79.6392 273.335 86.3174 cv
273.335 89.6553 271.97 92.6885 269.694 94.9649 cv
cp
377.269 72.5069 mo
373.476 68.8658 368.62 66.8916 363.461 66.8916 cv
356.179 66.8916 349.957 70.8374 346.619 76.6016 cv
343.889 75.0855 340.701 74.3243 337.515 74.3243 cv
334.512 74.3243 331.513 75.0757 328.95 76.2657 cv
328.154 74.9131 327.221 73.6382 326.138 72.5069 cv
324.284 70.7334 322.073 69.3165 319.67 68.3428 cv
319.588 68.3135 319.5 68.2891 319.418 68.254 cv
318.906 68.0567 318.393 67.8692 317.863 67.7164 cv
317.822 67.7012 317.781 67.6963 317.741 67.6812 cv
315.991 67.1729 314.172 66.8916 312.331 66.8916 cv
312.304 66.8916 312.28 66.896 312.254 66.896 cv
312.228 66.896 312.202 66.8916 312.175 66.8916 cv
301.402 66.8916 292.753 75.5391 292.753 86.3126 cv
292.753 87.2505 292.841 88.1792 292.972 89.0918 cv
291.019 90.2725 288.776 91.0191 286.385 91.0191 cv
284.259 91.0191 282.136 90.4112 280.164 89.502 cv
280.314 88.4405 280.467 87.379 280.467 86.3174 cv
280.467 81.1553 278.495 76.148 274.853 72.5069 cv
271.211 69.0201 266.205 66.8916 261.045 66.8916 cv
255.887 66.8916 251.029 69.0201 247.237 72.5069 cv
243.595 76.3003 241.624 81.1553 241.624 86.3174 cv
241.624 97.0894 250.271 105.737 261.045 105.737 cv
266.205 105.737 271.211 103.763 274.853 100.122 cv
275.915 98.9073 276.977 97.6968 277.735 96.3282 cv
280.314 97.544 283.35 98.3047 286.385 98.3047 cv
289.525 98.3047 292.661 97.5577 295.365 96.0821 cv
296.187 97.524 297.179 98.8829 298.367 100.122 cv
300.858 102.415 303.814 104.103 307.008 105.002 cv
307.09 105.027 307.174 105.042 307.258 105.066 cv
307.98 105.259 308.714 105.412 309.457 105.517 cv
309.561 105.536 309.666 105.55 309.77 105.565 cv
310.565 105.668 311.365 105.737 312.175 105.737 cv
312.205 105.737 312.234 105.733 312.264 105.733 cv
312.286 105.733 312.308 105.737 312.331 105.737 cv
317.489 105.737 322.345 103.763 326.138 100.122 cv
329.628 96.4815 331.753 91.6265 331.753 86.3174 cv
331.753 85.2212 331.639 84.1334 331.452 83.063 cv
333.38 82.1924 335.445 81.6094 337.515 81.6094 cv
339.941 81.6094 342.219 82.3711 344.19 83.5801 cv
344.04 84.4942 344.04 85.2505 344.04 86.3126 cv
344.04 91.4737 346.012 96.3282 349.653 100.122 cv
353.296 103.61 358.15 105.737 363.461 105.737 cv
368.62 105.737 373.626 103.61 377.269 100.122 cv
380.759 96.4815 382.883 91.4737 382.883 86.3126 cv
382.883 81.002 380.759 76.148 377.269 72.5069 cv
0.960785 0.94902 0.29804 0.184314 cmyk
f
312.251 78.7261 mo
308.062 78.7261 304.666 82.1231 304.666 86.3126 cv
304.666 90.5049 308.062 93.898 312.251 93.898 cv
316.442 93.898 319.841 90.5049 319.841 86.3126 cv
319.841 82.1231 316.442 78.7261 312.251 78.7261 cv
0.196079 0.219608 0.505883 0.0470589 cmyk
f
188.062 161.73 mo
187.075 161.73 li
185.904 158.708 li
184.732 161.73 li
183.746 161.73 li
182.028 157.47 li
183.104 157.47 li
184.264 160.471 li
185.413 157.47 li
186.389 157.47 li
187.542 160.471 li
188.703 157.47 li
189.779 157.47 li
188.062 161.73 li
0.960785 0.94902 0.29804 0.184314 cmyk
f
196.104 161.73 mo
196.104 157.47 li
200.242 157.47 li
200.242 158.291 li
197.113 158.291 li
197.113 159.188 li
199.6 159.188 li
199.6 159.953 li
197.113 159.953 li
197.113 160.912 li
200.286 160.912 li
200.286 161.73 li
196.104 161.73 li
f
210.274 160.253 mo
209.616 159.874 li
207.781 159.874 li
207.781 160.967 li
210.274 160.967 li
210.274 160.253 li
cp
210.23 158.234 mo
207.781 158.234 li
207.781 159.216 li
209.616 159.216 li
210.23 158.831 li
210.23 158.234 li
cp
210.898 161.73 mo
206.772 161.73 li
206.772 157.47 li
210.859 157.47 li
211.094 157.47 211.24 157.627 211.24 157.872 cv
211.24 158.848 li
211.24 159.026 211.172 159.132 211.015 159.216 cv
210.43 159.551 li
211.055 159.885 li
211.211 159.963 211.283 160.053 211.283 160.243 cv
211.283 161.33 li
211.283 161.575 211.133 161.73 210.898 161.73 cv
f
227.791 158.358 mo
226.943 160.22 li
228.644 160.22 li
227.791 158.358 li
cp
229.331 161.73 mo
228.99 160.973 li
226.597 160.973 li
226.246 161.73 li
225.204 161.73 li
225.204 161.72 li
227.261 157.47 li
228.326 157.47 li
230.384 161.72 li
230.384 161.73 li
229.331 161.73 li
f
240.009 158.268 mo
237.706 158.268 li
237.706 159.601 li
240.009 159.601 li
240.009 158.268 li
cp
240.634 160.376 mo
237.706 160.376 li
237.706 161.73 li
236.696 161.73 li
236.696 157.47 li
240.64 157.47 li
240.874 157.47 241.013 157.627 241.013 157.872 cv
241.013 159.974 li
241.013 160.22 240.869 160.376 240.634 160.376 cv
f
250.912 158.268 mo
248.609 158.268 li
248.609 159.601 li
250.912 159.601 li
250.912 158.268 li
cp
251.537 160.376 mo
248.609 160.376 li
248.609 161.73 li
247.599 161.73 li
247.599 157.47 li
251.542 157.47 li
251.777 157.47 251.916 157.627 251.916 157.872 cv
251.916 159.974 li
251.916 160.22 251.771 160.376 251.537 160.376 cv
f
258.501 161.73 mo
258.501 157.47 li
259.512 157.47 li
259.512 160.912 li
262.372 160.912 li
262.372 161.73 li
258.501 161.73 li
f
268.708 161.73 mo
268.708 157.47 li
269.717 157.47 li
269.717 161.73 li
268.708 161.73 li
f
280.619 161.73 mo
276.788 161.73 li
276.554 161.73 276.414 161.575 276.414 161.33 cv
276.414 157.872 li
276.414 157.627 276.554 157.47 276.788 157.47 cv
280.619 157.47 li
280.854 157.47 281.004 157.627 281.004 157.872 cv
281.004 159.038 li
279.995 159.038 li
279.995 158.268 li
277.424 158.268 li
277.424 160.935 li
279.995 160.935 li
279.995 160.12 li
281.004 160.12 li
281.004 161.33 li
281.004 161.575 280.854 161.73 280.619 161.73 cv
f
289.836 158.358 mo
288.989 160.22 li
290.691 160.22 li
289.836 158.358 li
cp
291.376 161.73 mo
291.037 160.973 li
288.644 160.973 li
288.293 161.73 li
287.25 161.73 li
287.25 161.72 li
289.308 157.47 li
290.373 157.47 li
292.431 161.72 li
292.431 161.73 li
291.376 161.73 li
f
300.685 158.291 mo
300.685 161.73 li
299.68 161.73 li
299.68 158.291 li
297.874 158.291 li
297.874 157.47 li
302.491 157.47 li
302.491 158.291 li
300.685 158.291 li
f
308.855 161.73 mo
308.855 157.47 li
309.863 157.47 li
309.863 161.73 li
308.855 161.73 li
f
320.203 158.268 mo
317.57 158.268 li
317.57 160.935 li
320.203 160.935 li
320.203 158.268 li
cp
320.839 161.73 mo
316.935 161.73 li
316.701 161.73 316.562 161.575 316.562 161.33 cv
316.562 157.872 li
316.562 157.627 316.701 157.47 316.935 157.47 cv
320.839 157.47 li
321.066 157.47 321.212 157.627 321.212 157.872 cv
321.212 161.33 li
321.212 161.575 321.066 161.73 320.839 161.73 cv
f
331.507 161.73 mo
328.925 158.803 li
328.925 161.73 li
327.915 161.73 li
327.915 157.47 li
328.908 157.47 li
331.49 160.314 li
331.49 157.47 li
332.505 157.47 li
332.505 161.73 li
331.507 161.73 li
f
347.819 158.291 mo
347.819 159.205 li
350.245 159.205 li
350.245 159.968 li
347.819 159.968 li
347.819 161.73 li
346.81 161.73 li
346.81 157.47 li
350.848 157.47 li
350.848 158.291 li
347.819 158.291 li
f
360.617 161.73 mo
358.677 160.014 li
358.677 159.506 li
360.551 159.506 li
360.551 158.268 li
358.197 158.268 li
358.197 161.73 li
357.188 161.73 li
357.188 157.47 li
361.177 157.47 li
361.404 157.47 361.554 157.627 361.554 157.872 cv
361.554 159.83 li
361.554 160.07 361.404 160.22 361.177 160.22 cv
360.105 160.22 li
361.844 161.692 li
361.844 161.73 li
360.617 161.73 li
f
370.389 158.358 mo
369.539 160.22 li
371.239 160.22 li
370.389 158.358 li
cp
371.927 161.73 mo
371.587 160.973 li
369.194 160.973 li
368.844 161.73 li
367.801 161.73 li
367.801 161.72 li
369.857 157.47 li
370.924 157.47 li
372.981 161.72 li
372.981 161.73 li
371.927 161.73 li
f
383.733 161.73 mo
383.733 159.126 li
382.473 161.73 li
381.554 161.73 li
380.287 159.126 li
380.287 161.73 li
379.294 161.73 li
379.294 157.47 li
380.42 157.47 li
382.004 160.688 li
382.017 160.688 li
383.605 157.47 li
384.721 157.47 li
384.721 161.73 li
383.733 161.73 li
f
391.424 161.73 mo
391.424 157.47 li
395.562 157.47 li
395.562 158.291 li
392.435 158.291 li
392.435 159.188 li
394.921 159.188 li
394.921 159.953 li
392.435 159.953 li
392.435 160.912 li
395.606 160.912 li
395.606 161.73 li
391.424 161.73 li
f
407.748 161.73 mo
406.76 161.73 li
405.589 158.708 li
404.418 161.73 li
403.431 161.73 li
401.713 157.47 li
402.79 157.47 li
403.947 160.471 li
405.097 157.47 li
406.073 157.47 li
407.229 160.471 li
408.389 157.47 li
409.464 157.47 li
407.748 161.73 li
f
419.39 158.268 mo
416.759 158.268 li
416.759 160.935 li
419.39 160.935 li
419.39 158.268 li
cp
420.026 161.73 mo
416.122 161.73 li
415.889 161.73 415.748 161.575 415.748 161.33 cv
415.748 157.872 li
415.748 157.627 415.889 157.47 416.122 157.47 cv
420.026 157.47 li
420.256 157.47 420.4 157.627 420.4 157.872 cv
420.4 161.33 li
420.4 161.575 420.256 161.73 420.026 161.73 cv
f
430.533 161.73 mo
428.592 160.014 li
428.592 159.506 li
430.467 159.506 li
430.467 158.268 li
428.114 158.268 li
428.114 161.73 li
427.104 161.73 li
427.104 157.47 li
431.09 157.47 li
431.319 157.47 431.471 157.627 431.471 157.872 cv
431.471 159.83 li
431.471 160.07 431.319 160.22 431.09 160.22 cv
430.02 160.22 li
431.76 161.692 li
431.76 161.73 li
430.533 161.73 li
f
441.134 161.73 mo
439.115 159.98 li
439.115 161.73 li
438.106 161.73 li
438.106 157.47 li
439.115 157.47 li
439.115 159.122 li
440.882 157.47 li
442.167 157.47 li
442.167 157.504 li
439.94 159.511 li
442.479 161.698 li
442.479 161.73 li
441.134 161.73 li
f
328.594 270.938 mo
327.068 270.938 325.682 270.383 324.641 269.342 cv
323.602 268.304 322.978 266.846 322.978 265.39 cv
322.978 263.864 323.602 262.478 324.641 261.438 cv
325.682 260.397 327.068 259.775 328.594 259.775 cv
330.05 259.775 331.436 260.397 332.546 261.438 cv
333.586 262.478 334.141 263.864 334.141 265.39 cv
334.141 268.441 331.645 270.938 328.594 270.938 cv
cp
305.157 270.938 mo
304.3 270.938 303.453 270.724 302.68 270.352 cv
302.169 270.082 301.689 269.757 301.276 269.344 cv
300.236 268.304 299.612 266.918 299.612 265.393 cv
299.612 263.936 300.236 262.478 301.276 261.44 cv
302.316 260.399 303.703 259.845 305.229 259.845 cv
306.744 259.845 308.122 260.463 309.126 261.458 cv
310.155 262.496 310.773 263.873 310.773 265.39 cv
310.773 268.441 308.209 270.938 305.157 270.938 cv
cp
285.745 269.344 mo
284.705 270.385 283.318 271.008 281.793 271.008 cv
280.336 271.008 278.88 270.385 277.84 269.344 cv
276.8 268.304 276.246 266.918 276.246 265.393 cv
276.246 263.936 276.8 262.478 277.84 261.44 cv
278.88 260.399 280.336 259.845 281.793 259.845 cv
284.843 259.845 287.409 262.341 287.409 265.393 cv
287.409 266.918 286.785 268.304 285.745 269.344 cv
cp
334.903 259.082 mo
333.17 257.418 330.951 256.516 328.594 256.516 cv
325.266 256.516 322.423 258.319 320.897 260.953 cv
319.649 260.26 318.192 259.912 316.736 259.912 cv
315.364 259.912 313.994 260.255 312.823 260.799 cv
312.459 260.181 312.032 259.599 311.538 259.082 cv
310.69 258.271 309.681 257.624 308.582 257.179 cv
308.545 257.166 308.505 257.154 308.467 257.138 cv
308.233 257.048 307.998 256.962 307.757 256.893 cv
307.738 256.886 307.719 256.883 307.701 256.876 cv
306.901 256.644 306.069 256.516 305.229 256.516 cv
305.217 256.516 305.205 256.518 305.193 256.518 cv
305.182 256.518 305.17 256.516 305.157 256.516 cv
300.234 256.516 296.282 260.467 296.282 265.39 cv
296.282 265.819 296.322 266.243 296.382 266.66 cv
295.489 267.2 294.465 267.541 293.372 267.541 cv
292.401 267.541 291.431 267.263 290.529 266.848 cv
290.598 266.363 290.668 265.877 290.668 265.393 cv
290.668 263.034 289.767 260.746 288.102 259.082 cv
286.438 257.488 284.15 256.516 281.793 256.516 cv
279.436 256.516 277.216 257.488 275.482 259.082 cv
273.818 260.815 272.918 263.034 272.918 265.393 cv
272.918 270.315 276.869 274.267 281.793 274.267 cv
284.15 274.267 286.438 273.364 288.102 271.701 cv
288.588 271.146 289.073 270.593 289.419 269.967 cv
290.598 270.523 291.985 270.871 293.372 270.871 cv
294.807 270.871 296.24 270.529 297.476 269.854 cv
297.852 270.514 298.305 271.135 298.848 271.701 cv
299.986 272.748 301.337 273.52 302.796 273.931 cv
302.834 273.942 302.872 273.949 302.911 273.96 cv
303.24 274.048 303.576 274.118 303.915 274.166 cv
303.963 274.174 304.011 274.181 304.059 274.188 cv
304.422 274.235 304.787 274.267 305.157 274.267 cv
305.171 274.267 305.185 274.265 305.198 274.265 cv
305.208 274.265 305.218 274.267 305.229 274.267 cv
307.586 274.267 309.805 273.364 311.538 271.701 cv
313.133 270.037 314.104 267.819 314.104 265.393 cv
314.104 264.892 314.052 264.395 313.966 263.905 cv
314.847 263.508 315.791 263.241 316.736 263.241 cv
317.846 263.241 318.887 263.589 319.787 264.142 cv
319.719 264.56 319.719 264.905 319.719 265.39 cv
319.719 267.749 320.619 269.967 322.283 271.701 cv
323.948 273.294 326.167 274.267 328.594 274.267 cv
330.951 274.267 333.238 273.294 334.903 271.701 cv
336.498 270.037 337.469 267.749 337.469 265.39 cv
337.469 262.963 336.498 260.746 334.903 259.082 cv
f
305.192 261.924 mo
303.278 261.924 301.726 263.476 301.726 265.39 cv
301.726 267.306 303.278 268.856 305.192 268.856 cv
307.107 268.856 308.66 267.306 308.66 265.39 cv
308.66 263.476 307.107 261.924 305.192 261.924 cv
0.196079 0.219608 0.505883 0.0470589 cmyk
f
248.441 299.854 mo
247.99 299.854 li
247.456 298.473 li
246.92 299.854 li
246.469 299.854 li
245.684 297.907 li
246.176 297.907 li
246.706 299.278 li
247.23 297.907 li
247.677 297.907 li
248.204 299.278 li
248.734 297.907 li
249.226 297.907 li
248.441 299.854 li
0.960785 0.94902 0.29804 0.184314 cmyk
f
252.116 299.854 mo
252.116 297.907 li
254.007 297.907 li
254.007 298.282 li
252.577 298.282 li
252.577 298.692 li
253.714 298.692 li
253.714 299.042 li
252.577 299.042 li
252.577 299.479 li
254.027 299.479 li
254.027 299.854 li
252.116 299.854 li
f
258.592 299.178 mo
258.291 299.006 li
257.452 299.006 li
257.452 299.504 li
258.592 299.504 li
258.592 299.178 li
cp
258.571 298.256 mo
257.452 298.256 li
257.452 298.706 li
258.291 298.706 li
258.571 298.529 li
258.571 298.256 li
cp
258.877 299.854 mo
256.991 299.854 li
256.991 297.907 li
258.859 297.907 li
258.966 297.907 259.033 297.979 259.033 298.09 cv
259.033 298.537 li
259.033 298.618 259.002 298.666 258.93 298.706 cv
258.663 298.858 li
258.949 299.01 li
259.02 299.046 259.053 299.086 259.053 299.174 cv
259.053 299.67 li
259.053 299.784 258.984 299.854 258.877 299.854 cv
f
266.596 298.313 mo
266.209 299.164 li
266.986 299.164 li
266.596 298.313 li
cp
267.3 299.854 mo
267.144 299.507 li
266.051 299.507 li
265.89 299.854 li
265.414 299.854 li
265.414 299.849 li
266.354 297.907 li
266.841 297.907 li
267.781 299.849 li
267.781 299.854 li
267.3 299.854 li
f
272.18 298.271 mo
271.127 298.271 li
271.127 298.881 li
272.18 298.881 li
272.18 298.271 li
cp
272.465 299.235 mo
271.127 299.235 li
271.127 299.854 li
270.666 299.854 li
270.666 297.907 li
272.468 297.907 li
272.575 297.907 272.638 297.979 272.638 298.09 cv
272.638 299.051 li
272.638 299.164 272.572 299.235 272.465 299.235 cv
f
277.162 298.271 mo
276.11 298.271 li
276.11 298.881 li
277.162 298.881 li
277.162 298.271 li
cp
277.447 299.235 mo
276.11 299.235 li
276.11 299.854 li
275.648 299.854 li
275.648 297.907 li
277.45 297.907 li
277.557 297.907 277.621 297.979 277.621 298.09 cv
277.621 299.051 li
277.621 299.164 277.554 299.235 277.447 299.235 cv
f
280.63 299.854 mo
280.63 297.907 li
281.092 297.907 li
281.092 299.479 li
282.398 299.479 li
282.398 299.854 li
280.63 299.854 li
f
285.294 299.854 mo
285.294 297.907 li
285.755 297.907 li
285.755 299.854 li
285.294 299.854 li
f
290.737 299.854 mo
288.986 299.854 li
288.879 299.854 288.815 299.784 288.815 299.67 cv
288.815 298.09 li
288.815 297.979 288.879 297.907 288.986 297.907 cv
290.737 297.907 li
290.844 297.907 290.913 297.979 290.913 298.09 cv
290.913 298.624 li
290.452 298.624 li
290.452 298.271 li
289.277 298.271 li
289.277 299.491 li
290.452 299.491 li
290.452 299.118 li
290.913 299.118 li
290.913 299.67 li
290.913 299.784 290.844 299.854 290.737 299.854 cv
f
294.949 298.313 mo
294.562 299.164 li
295.34 299.164 li
294.949 298.313 li
cp
295.653 299.854 mo
295.498 299.507 li
294.404 299.507 li
294.244 299.854 li
293.767 299.854 li
293.767 299.849 li
294.708 297.907 li
295.194 297.907 li
296.135 299.849 li
296.135 299.854 li
295.653 299.854 li
f
299.906 298.282 mo
299.906 299.854 li
299.447 299.854 li
299.447 298.282 li
298.622 298.282 li
298.622 297.907 li
300.732 297.907 li
300.732 298.282 li
299.906 298.282 li
f
303.641 299.854 mo
303.641 297.907 li
304.101 297.907 li
304.101 299.854 li
303.641 299.854 li
f
308.826 298.271 mo
307.623 298.271 li
307.623 299.491 li
308.826 299.491 li
308.826 298.271 li
cp
309.116 299.854 mo
307.332 299.854 li
307.226 299.854 307.162 299.784 307.162 299.67 cv
307.162 298.09 li
307.162 297.979 307.226 297.907 307.332 297.907 cv
309.116 297.907 li
309.221 297.907 309.287 297.979 309.287 298.09 cv
309.287 299.67 li
309.287 299.784 309.221 299.854 309.116 299.854 cv
f
313.991 299.854 mo
312.812 298.516 li
312.812 299.854 li
312.35 299.854 li
312.35 297.907 li
312.804 297.907 li
313.983 299.207 li
313.983 297.907 li
314.447 297.907 li
314.447 299.854 li
313.991 299.854 li
f
321.445 298.282 mo
321.445 298.7 li
322.554 298.7 li
322.554 299.048 li
321.445 299.048 li
321.445 299.854 li
320.984 299.854 li
320.984 297.907 li
322.829 297.907 li
322.829 298.282 li
321.445 298.282 li
f
327.294 299.854 mo
326.407 299.069 li
326.407 298.837 li
327.264 298.837 li
327.264 298.271 li
326.188 298.271 li
326.188 299.854 li
325.727 299.854 li
325.727 297.907 li
327.55 297.907 li
327.653 297.907 327.722 297.979 327.722 298.09 cv
327.722 298.985 li
327.722 299.094 327.653 299.164 327.55 299.164 cv
327.06 299.164 li
327.854 299.836 li
327.854 299.854 li
327.294 299.854 li
f
331.759 298.313 mo
331.371 299.164 li
332.147 299.164 li
331.759 298.313 li
cp
332.462 299.854 mo
332.307 299.507 li
331.213 299.507 li
331.053 299.854 li
330.576 299.854 li
330.576 299.849 li
331.517 297.907 li
332.004 297.907 li
332.944 299.849 li
332.944 299.854 li
332.462 299.854 li
f
337.857 299.854 mo
337.857 298.665 li
337.281 299.854 li
336.861 299.854 li
336.282 298.665 li
336.282 299.854 li
335.828 299.854 li
335.828 297.907 li
336.343 297.907 li
337.066 299.377 li
337.072 299.377 li
337.799 297.907 li
338.309 297.907 li
338.309 299.854 li
337.857 299.854 li
f
341.371 299.854 mo
341.371 297.907 li
343.263 297.907 li
343.263 298.282 li
341.833 298.282 li
341.833 298.692 li
342.97 298.692 li
342.97 299.042 li
341.833 299.042 li
341.833 299.479 li
343.283 299.479 li
343.283 299.854 li
341.371 299.854 li
f
348.831 299.854 mo
348.38 299.854 li
347.845 298.473 li
347.31 299.854 li
346.858 299.854 li
346.073 297.907 li
346.565 297.907 li
347.095 299.278 li
347.619 297.907 li
348.065 297.907 li
348.594 299.278 li
349.124 297.907 li
349.615 297.907 li
348.831 299.854 li
f
354.151 298.271 mo
352.949 298.271 li
352.949 299.491 li
354.151 299.491 li
354.151 298.271 li
cp
354.442 299.854 mo
352.658 299.854 li
352.551 299.854 352.487 299.784 352.487 299.67 cv
352.487 298.09 li
352.487 297.979 352.551 297.907 352.658 297.907 cv
354.442 297.907 li
354.547 297.907 354.613 297.979 354.613 298.09 cv
354.613 299.67 li
354.613 299.784 354.547 299.854 354.442 299.854 cv
f
359.243 299.854 mo
358.356 299.069 li
358.356 298.837 li
359.213 298.837 li
359.213 298.271 li
358.138 298.271 li
358.138 299.854 li
357.676 299.854 li
357.676 297.907 li
359.498 297.907 li
359.603 297.907 359.672 297.979 359.672 298.09 cv
359.672 298.985 li
359.672 299.094 359.603 299.164 359.498 299.164 cv
359.009 299.164 li
359.804 299.836 li
359.804 299.854 li
359.243 299.854 li
f
364.087 299.854 mo
363.165 299.053 li
363.165 299.854 li
362.704 299.854 li
362.704 297.907 li
363.165 297.907 li
363.165 298.662 li
363.973 297.907 li
364.56 297.907 li
364.56 297.922 li
363.542 298.84 li
364.702 299.838 li
364.702 299.854 li
364.087 299.854 li
f
245.891 288.889 mo
245.891 289.898 245.555 290.764 244.785 291.534 cv
244.063 292.256 243.197 292.592 242.139 292.641 cv
233.266 292.641 li
232.352 292.641 231.582 292.352 230.86 291.774 cv
230.187 292.352 229.37 292.641 228.408 292.641 cv
220.249 292.641 li
219.24 292.641 218.373 292.305 217.604 291.534 cv
216.883 290.811 216.545 289.948 216.497 288.889 cv
216.497 283.357 li
219.191 283.357 li
219.191 288.696 li
219.191 289.177 219.335 289.562 219.72 289.948 cv
220.057 290.235 220.441 290.378 220.97 290.428 cv
227.734 290.428 li
228.215 290.428 228.6 290.284 228.937 289.948 cv
229.273 289.608 229.417 289.225 229.465 288.696 cv
229.465 283.357 li
232.208 283.357 li
232.208 288.696 li
232.208 289.177 232.352 289.562 232.688 289.948 cv
233.025 290.235 233.409 290.378 233.938 290.428 cv
241.466 290.428 li
241.946 290.428 242.332 290.284 242.668 289.948 cv
243.005 289.608 243.149 289.225 243.197 288.696 cv
243.197 283.357 li
245.891 283.357 li
245.891 288.889 li
0.196079 0.219608 0.505883 0.0470589 cmyk
f
270.398 292.641 mo
251.663 292.641 li
250.653 292.641 249.788 292.305 249.017 291.534 cv
248.296 290.811 247.959 289.948 247.911 288.889 cv
247.911 287.158 li
247.911 286.147 248.248 285.28 249.017 284.511 cv
249.739 283.79 250.604 283.452 251.663 283.405 cv
270.398 283.405 li
270.398 285.617 li
267.8 289.177 li
265.106 289.177 li
267.656 285.617 li
252.384 285.617 li
251.903 285.617 251.519 285.762 251.134 286.147 cv
250.796 286.435 250.653 286.82 250.604 287.349 cv
250.604 288.696 li
250.604 289.177 250.75 289.562 251.134 289.948 cv
251.47 290.235 251.855 290.378 252.384 290.428 cv
270.398 290.428 li
270.398 292.641 li
f
292.641 288.696 mo
292.641 287.349 li
292.641 286.868 292.497 286.483 292.111 286.147 cv
291.823 285.809 291.438 285.665 290.909 285.617 cv
275.541 285.617 li
275.541 290.428 li
290.909 290.428 li
291.39 290.428 291.775 290.284 292.111 289.948 cv
292.448 289.608 292.592 289.225 292.641 288.696 cv
cp
295.334 288.889 mo
295.334 289.898 294.998 290.764 294.228 291.534 cv
293.555 292.256 292.688 292.592 291.582 292.641 cv
272.847 292.641 li
272.847 280.327 li
275.541 280.327 li
275.541 283.405 li
291.582 283.405 li
292.641 283.405 293.507 283.742 294.228 284.511 cv
294.949 285.232 295.286 286.098 295.334 287.158 cv
295.334 288.889 li
f
327.416 288.889 mo
327.416 289.898 327.079 290.764 326.31 291.534 cv
325.588 292.256 324.723 292.592 323.663 292.641 cv
314.789 292.641 li
313.876 292.641 313.106 292.352 312.385 291.774 cv
311.711 292.352 310.894 292.641 309.932 292.641 cv
301.058 292.641 li
300.048 292.641 299.182 292.305 298.412 291.534 cv
297.69 290.811 297.354 289.948 297.306 288.889 cv
297.306 283.357 li
299.999 283.357 li
299.999 288.696 li
299.999 289.177 300.145 289.562 300.528 289.948 cv
300.865 290.235 301.25 290.378 301.78 290.428 cv
309.259 290.428 li
309.739 290.428 310.124 290.284 310.46 289.948 cv
310.797 289.608 310.941 289.225 310.989 288.696 cv
310.989 283.357 li
313.731 283.357 li
313.731 288.696 li
313.731 289.177 313.876 289.562 314.212 289.948 cv
314.55 290.235 314.934 290.378 315.463 290.428 cv
322.99 290.428 li
323.471 290.428 323.855 290.284 324.193 289.948 cv
324.529 289.608 324.673 289.225 324.723 288.696 cv
324.723 283.357 li
327.416 283.357 li
327.416 288.889 li
0.960785 0.94902 0.29804 0.184314 cmyk
f
349.178 288.669 mo
349.178 287.274 li
349.178 286.793 349.032 286.408 348.647 286.072 cv
348.312 285.735 347.926 285.592 347.397 285.542 cv
333.954 285.542 li
333.473 285.542 333.088 285.688 332.703 286.072 cv
332.365 286.361 332.223 286.746 332.174 287.274 cv
332.174 288.669 li
332.174 289.151 332.318 289.536 332.703 289.92 cv
333.04 290.21 333.426 290.354 333.954 290.401 cv
347.397 290.401 li
347.879 290.401 348.265 290.256 348.647 289.92 cv
348.984 289.583 349.129 289.198 349.178 288.669 cv
cp
351.87 288.861 mo
351.87 289.874 351.534 290.739 350.764 291.507 cv
350.044 292.229 349.178 292.566 348.119 292.614 cv
333.231 292.614 li
332.223 292.614 331.356 292.276 330.587 291.507 cv
329.865 290.786 329.527 289.92 329.48 288.861 cv
329.48 287.081 li
329.48 286.072 329.817 285.207 330.587 284.437 cv
331.308 283.714 332.174 283.378 333.231 283.329 cv
348.119 283.329 li
349.129 283.329 349.996 283.666 350.764 284.437 cv
351.486 285.157 351.822 286.024 351.87 287.081 cv
351.87 288.861 li
f
372.061 285.569 mo
358.271 285.569 li
357.79 285.569 357.405 285.712 357.021 286.098 cv
356.683 286.387 356.538 286.772 356.491 287.301 cv
356.491 292.641 li
353.797 292.641 li
353.797 287.11 li
353.797 286.098 354.134 285.232 354.903 284.461 cv
355.625 283.742 356.491 283.405 357.55 283.357 cv
372.061 283.357 li
372.061 285.569 li
f
393.889 284.993 mo
393.889 286.049 393.504 286.916 392.735 287.686 cv
393.504 288.407 393.889 289.322 393.889 290.428 cv
393.889 292.641 li
391.148 292.641 li
391.148 290.621 li
391.148 290.139 391.004 289.754 390.618 289.416 cv
390.33 289.081 389.946 288.936 389.416 288.889 cv
376.896 288.889 li
376.896 292.641 li
374.202 292.641 li
374.202 280.327 li
376.896 280.327 li
376.896 286.531 li
389.416 286.531 li
389.897 286.531 390.283 286.387 390.618 286.049 cv
390.955 285.712 391.099 285.328 391.148 284.799 cv
391.148 283.405 li
393.889 283.405 li
393.889 284.993 li
f
396.205 291.073 mo
396.008 291.073 li
396.008 291.444 li
396.205 291.444 li
396.323 291.444 396.406 291.366 396.406 291.26 cv
396.406 291.153 396.323 291.073 396.205 291.073 cv
cp
396.412 292.002 mo
396.169 291.57 li
396.008 291.57 li
396.008 292.002 li
395.861 292.002 li
395.861 290.942 li
396.222 290.942 li
396.406 290.942 396.556 291.081 396.556 291.26 cv
396.556 291.415 396.459 291.51 396.329 291.551 cv
396.583 292.002 li
396.412 292.002 li
cp
396.177 290.647 mo
395.728 290.647 395.364 291.019 395.364 291.473 cv
395.364 291.928 395.728 292.299 396.177 292.299 cv
396.625 292.299 396.992 291.928 396.992 291.473 cv
396.992 291.019 396.625 290.647 396.177 290.647 cv
cp
396.177 292.441 mo
395.642 292.441 395.209 292.008 395.209 291.473 cv
395.209 290.939 395.642 290.506 396.177 290.506 cv
396.711 290.506 397.144 290.939 397.144 291.473 cv
397.144 292.008 396.711 292.441 396.177 292.441 cv
f
402.319 392.493 mo
402.319 398.2 397.693 402.826 391.986 402.826 cv
218.985 402.826 li
213.279 402.826 208.652 398.2 208.652 392.493 cv
208.652 386.786 213.279 382.16 218.985 382.16 cv
391.986 382.16 li
397.693 382.16 402.319 386.786 402.319 392.493 cv
0.196079 0.219608 0.505883 0.0470589 cmyk
f
284.759 394.229 mo
284.759 394.957 284.516 395.582 283.961 396.136 cv
283.439 396.657 282.814 396.9 282.052 396.935 cv
275.65 396.935 li
274.99 396.935 274.436 396.727 273.915 396.31 cv
273.428 396.727 272.84 396.935 272.146 396.935 cv
266.259 396.935 li
265.531 396.935 264.905 396.693 264.351 396.136 cv
263.83 395.615 263.588 394.993 263.553 394.229 cv
263.553 390.239 li
265.495 390.239 li
265.495 394.089 li
265.495 394.436 265.6 394.713 265.877 394.993 cv
266.121 395.2 266.397 395.303 266.779 395.339 cv
271.66 395.339 li
272.006 395.339 272.284 395.235 272.527 394.993 cv
272.77 394.748 272.873 394.472 272.908 394.089 cv
272.908 390.239 li
274.887 390.239 li
274.887 394.089 li
274.887 394.436 274.99 394.713 275.233 394.993 cv
275.477 395.2 275.754 395.303 276.135 395.339 cv
281.566 395.339 li
281.912 395.339 282.19 395.235 282.434 394.993 cv
282.676 394.748 282.78 394.472 282.814 394.089 cv
282.814 390.239 li
284.759 390.239 li
284.759 394.229 li
0 0 0 0 cmyk
f
302.439 396.935 mo
288.923 396.935 li
288.193 396.935 287.569 396.693 287.014 396.136 cv
286.494 395.615 286.25 394.993 286.216 394.229 cv
286.216 392.979 li
286.216 392.25 286.459 391.625 287.014 391.07 cv
287.535 390.55 288.159 390.306 288.923 390.272 cv
302.439 390.272 li
302.439 391.868 li
300.564 394.436 li
298.621 394.436 li
300.461 391.868 li
289.442 391.868 li
289.096 391.868 288.818 391.973 288.541 392.25 cv
288.297 392.458 288.193 392.735 288.159 393.117 cv
288.159 394.089 li
288.159 394.436 288.264 394.713 288.541 394.993 cv
288.783 395.2 289.062 395.303 289.442 395.339 cv
302.439 395.339 li
302.439 396.935 li
f
318.485 394.089 mo
318.485 393.117 li
318.485 392.77 318.382 392.493 318.104 392.25 cv
317.896 392.006 317.618 391.903 317.236 391.868 cv
306.149 391.868 li
306.149 395.339 li
317.236 395.339 li
317.584 395.339 317.861 395.235 318.104 394.993 cv
318.348 394.748 318.451 394.472 318.485 394.089 cv
cp
320.43 394.229 mo
320.43 394.957 320.187 395.582 319.631 396.136 cv
319.146 396.657 318.52 396.9 317.722 396.935 cv
304.205 396.935 li
304.205 388.051 li
306.149 388.051 li
306.149 390.272 li
317.722 390.272 li
318.485 390.272 319.111 390.515 319.631 391.07 cv
320.151 391.589 320.395 392.215 320.43 392.979 cv
320.43 394.229 li
f
343.574 394.229 mo
343.574 394.957 343.332 395.582 342.776 396.136 cv
342.256 396.657 341.631 396.9 340.867 396.935 cv
334.465 396.935 li
333.807 396.935 333.25 396.727 332.73 396.31 cv
332.244 396.727 331.654 396.935 330.96 396.935 cv
324.559 396.935 li
323.83 396.935 323.205 396.693 322.649 396.136 cv
322.129 395.615 321.886 394.993 321.852 394.229 cv
321.852 390.239 li
323.795 390.239 li
323.795 394.089 li
323.795 394.436 323.9 394.713 324.176 394.993 cv
324.42 395.2 324.697 395.303 325.08 395.339 cv
330.475 395.339 li
330.822 395.339 331.1 395.235 331.342 394.993 cv
331.584 394.748 331.689 394.472 331.723 394.089 cv
331.723 390.239 li
333.702 390.239 li
333.702 394.089 li
333.702 394.436 333.807 394.713 334.049 394.993 cv
334.292 395.2 334.569 395.303 334.951 395.339 cv
340.381 395.339 li
340.729 395.339 341.006 395.235 341.25 394.993 cv
341.492 394.748 341.596 394.472 341.631 394.089 cv
341.631 390.239 li
343.574 390.239 li
343.574 394.229 li
f
359.274 394.071 mo
359.274 393.064 li
359.274 392.716 359.17 392.439 358.892 392.197 cv
358.649 391.953 358.371 391.85 357.99 391.815 cv
348.291 391.815 li
347.944 391.815 347.666 391.919 347.389 392.197 cv
347.145 392.405 347.042 392.683 347.007 393.064 cv
347.007 394.071 li
347.007 394.418 347.111 394.695 347.389 394.973 cv
347.633 395.181 347.91 395.286 348.291 395.319 cv
357.99 395.319 li
358.338 395.319 358.615 395.215 358.892 394.973 cv
359.135 394.729 359.24 394.452 359.274 394.071 cv
cp
361.217 394.208 mo
361.217 394.939 360.975 395.563 360.418 396.117 cv
359.9 396.638 359.274 396.88 358.511 396.916 cv
347.77 396.916 li
347.042 396.916 346.417 396.672 345.862 396.117 cv
345.342 395.597 345.098 394.973 345.064 394.208 cv
345.064 392.924 li
345.064 392.197 345.307 391.573 345.862 391.015 cv
346.382 390.496 347.007 390.251 347.77 390.217 cv
358.511 390.217 li
359.24 390.217 359.865 390.46 360.418 391.015 cv
360.939 391.537 361.182 392.161 361.217 392.924 cv
361.217 394.208 li
f
375.783 391.834 mo
365.834 391.834 li
365.488 391.834 365.211 391.937 364.933 392.215 cv
364.689 392.423 364.585 392.702 364.551 393.084 cv
364.551 396.935 li
362.607 396.935 li
362.607 392.945 li
362.607 392.215 362.85 391.589 363.405 391.034 cv
363.926 390.515 364.551 390.272 365.314 390.239 cv
375.783 390.239 li
375.783 391.834 li
f
391.531 391.418 mo
391.531 392.18 391.254 392.804 390.699 393.361 cv
391.254 393.88 391.531 394.541 391.531 395.339 cv
391.531 396.935 li
389.555 396.935 li
389.555 395.477 li
389.555 395.129 389.45 394.854 389.172 394.609 cv
388.964 394.366 388.688 394.262 388.304 394.229 cv
379.272 394.229 li
379.272 396.935 li
377.329 396.935 li
377.329 388.051 li
379.272 388.051 li
379.272 392.527 li
388.304 392.527 li
388.652 392.527 388.93 392.423 389.172 392.18 cv
389.414 391.937 389.518 391.659 389.555 391.278 cv
389.555 390.272 li
391.531 390.272 li
391.531 391.418 li
f
393.202 395.804 mo
393.06 395.804 li
393.06 396.071 li
393.202 396.071 li
393.287 396.071 393.347 396.015 393.347 395.939 cv
393.347 395.861 393.287 395.804 393.202 395.804 cv
cp
393.352 396.475 mo
393.177 396.163 li
393.06 396.163 li
393.06 396.475 li
392.954 396.475 li
392.954 395.71 li
393.215 395.71 li
393.347 395.71 393.455 395.81 393.455 395.939 cv
393.455 396.05 393.385 396.12 393.292 396.149 cv
393.475 396.475 li
393.352 396.475 li
cp
393.182 395.497 mo
392.857 395.497 392.596 395.765 392.596 396.093 cv
392.596 396.421 392.857 396.689 393.182 396.689 cv
393.505 396.689 393.771 396.421 393.771 396.093 cv
393.771 395.765 393.505 395.497 393.182 395.497 cv
cp
393.182 396.791 mo
392.796 396.791 392.483 396.48 392.483 396.093 cv
392.483 395.708 392.796 395.395 393.182 395.395 cv
393.567 395.395 393.879 395.708 393.879 396.093 cv
393.879 396.48 393.567 396.791 393.182 396.791 cv
f
252.647 396.333 mo
251.604 396.333 250.653 395.954 249.94 395.241 cv
249.229 394.53 248.802 393.532 248.802 392.535 cv
248.802 391.49 249.229 390.542 249.94 389.829 cv
250.653 389.116 251.604 388.69 252.647 388.69 cv
253.644 388.69 254.593 389.116 255.353 389.829 cv
256.065 390.542 256.445 391.49 256.445 392.535 cv
256.445 394.624 254.736 396.333 252.647 396.333 cv
cp
236.602 396.333 mo
236.014 396.333 235.434 396.186 234.904 395.932 cv
234.555 395.747 234.227 395.525 233.944 395.242 cv
233.232 394.53 232.805 393.581 232.805 392.537 cv
232.805 391.54 233.232 390.542 233.944 389.831 cv
234.656 389.118 235.605 388.738 236.65 388.738 cv
237.688 388.738 238.631 389.162 239.318 389.842 cv
240.022 390.553 240.446 391.497 240.446 392.535 cv
240.446 394.624 238.69 396.333 236.602 396.333 cv
cp
223.311 395.242 mo
222.598 395.954 221.648 396.381 220.604 396.381 cv
219.607 396.381 218.61 395.954 217.898 395.242 cv
217.187 394.53 216.807 393.581 216.807 392.537 cv
216.807 391.54 217.187 390.542 217.898 389.831 cv
218.61 389.118 219.607 388.738 220.604 388.738 cv
222.693 388.738 224.449 390.447 224.449 392.537 cv
224.449 393.581 224.022 394.53 223.311 395.242 cv
cp
256.967 388.215 mo
255.781 387.077 254.262 386.46 252.647 386.46 cv
250.369 386.46 248.422 387.693 247.377 389.497 cv
246.523 389.022 245.525 388.784 244.529 388.784 cv
243.589 388.784 242.651 389.019 241.85 389.391 cv
241.6 388.968 241.308 388.569 240.969 388.215 cv
240.389 387.661 239.697 387.217 238.945 386.913 cv
238.92 386.904 238.893 386.896 238.867 386.885 cv
238.707 386.823 238.546 386.764 238.381 386.716 cv
238.368 386.711 238.355 386.71 238.343 386.706 cv
237.795 386.547 237.226 386.46 236.65 386.46 cv
236.643 386.46 236.634 386.46 236.625 386.46 cv
236.617 386.46 236.609 386.46 236.602 386.46 cv
233.23 386.46 230.525 389.165 230.525 392.535 cv
230.525 392.828 230.552 393.119 230.593 393.405 cv
229.981 393.774 229.28 394.006 228.532 394.006 cv
227.867 394.006 227.203 393.817 226.586 393.532 cv
226.633 393.202 226.681 392.868 226.681 392.537 cv
226.681 390.921 226.064 389.355 224.924 388.215 cv
223.785 387.125 222.219 386.46 220.604 386.46 cv
218.99 386.46 217.471 387.125 216.283 388.215 cv
215.145 389.401 214.527 390.921 214.527 392.537 cv
214.527 395.907 217.233 398.612 220.604 398.612 cv
222.219 398.612 223.785 397.994 224.924 396.856 cv
225.256 396.475 225.59 396.096 225.826 395.668 cv
226.633 396.049 227.582 396.288 228.532 396.288 cv
229.515 396.288 230.496 396.053 231.342 395.59 cv
231.6 396.042 231.91 396.467 232.281 396.856 cv
233.061 397.572 233.985 398.1 234.984 398.382 cv
235.01 398.389 235.037 398.395 235.063 398.403 cv
235.289 398.463 235.519 398.51 235.75 398.543 cv
235.783 398.548 235.816 398.553 235.849 398.558 cv
236.098 398.59 236.348 398.612 236.602 398.612 cv
236.61 398.612 236.619 398.611 236.629 398.611 cv
236.636 398.611 236.643 398.612 236.65 398.612 cv
238.264 398.612 239.783 397.994 240.969 396.856 cv
242.062 395.716 242.727 394.197 242.727 392.537 cv
242.727 392.193 242.689 391.853 242.632 391.518 cv
243.234 391.246 243.882 391.063 244.529 391.063 cv
245.289 391.063 246.002 391.301 246.618 391.68 cv
246.57 391.966 246.57 392.203 246.57 392.535 cv
246.57 394.149 247.188 395.668 248.326 396.856 cv
249.466 397.946 250.985 398.612 252.647 398.612 cv
254.262 398.612 255.827 397.946 256.967 396.856 cv
258.059 395.716 258.724 394.149 258.724 392.535 cv
258.724 390.874 258.059 389.355 256.967 388.215 cv
f
236.625 390.162 mo
235.314 390.162 234.252 391.225 234.252 392.535 cv
234.252 393.847 235.314 394.908 236.625 394.908 cv
237.936 394.908 239 393.847 239 392.535 cv
239 391.225 237.936 390.162 236.625 390.162 cv
f
402.319 443.725 mo
402.319 449.432 397.693 454.058 391.986 454.058 cv
218.985 454.058 li
213.279 454.058 208.652 449.432 208.652 443.725 cv
208.652 438.018 213.279 433.392 218.985 433.392 cv
391.986 433.392 li
397.693 433.392 402.319 438.018 402.319 443.725 cv
0.960785 0.94902 0.29804 0.184314 cmyk
f
284.759 445.461 mo
284.759 446.189 284.516 446.814 283.961 447.369 cv
283.439 447.889 282.814 448.132 282.052 448.168 cv
275.65 448.168 li
274.99 448.168 274.436 447.96 273.915 447.542 cv
273.428 447.96 272.84 448.168 272.146 448.168 cv
266.259 448.168 li
265.531 448.168 264.905 447.925 264.351 447.369 cv
263.83 446.847 263.588 446.225 263.553 445.461 cv
263.553 441.471 li
265.495 441.471 li
265.495 445.322 li
265.495 445.668 265.6 445.946 265.877 446.225 cv
266.121 446.432 266.397 446.536 266.779 446.572 cv
271.66 446.572 li
272.006 446.572 272.284 446.467 272.527 446.225 cv
272.77 445.98 272.873 445.705 272.908 445.322 cv
272.908 441.471 li
274.887 441.471 li
274.887 445.322 li
274.887 445.668 274.99 445.946 275.233 446.225 cv
275.477 446.432 275.754 446.536 276.135 446.572 cv
281.566 446.572 li
281.912 446.572 282.19 446.467 282.434 446.225 cv
282.676 445.98 282.78 445.705 282.814 445.322 cv
282.814 441.471 li
284.759 441.471 li
284.759 445.461 li
0 0 0 0 cmyk
f
302.439 448.168 mo
288.923 448.168 li
288.193 448.168 287.569 447.925 287.014 447.369 cv
286.494 446.847 286.25 446.225 286.216 445.461 cv
286.216 444.211 li
286.216 443.482 286.459 442.857 287.014 442.302 cv
287.535 441.783 288.159 441.539 288.923 441.504 cv
302.439 441.504 li
302.439 443.1 li
300.564 445.668 li
298.621 445.668 li
300.461 443.1 li
289.442 443.1 li
289.096 443.1 288.818 443.206 288.541 443.482 cv
288.297 443.691 288.193 443.967 288.159 444.349 cv
288.159 445.322 li
288.159 445.668 288.264 445.946 288.541 446.225 cv
288.783 446.432 289.062 446.536 289.442 446.572 cv
302.439 446.572 li
302.439 448.168 li
f
318.485 445.322 mo
318.485 444.349 li
318.485 444.002 318.382 443.725 318.104 443.482 cv
317.896 443.239 317.618 443.135 317.236 443.1 cv
306.149 443.1 li
306.149 446.572 li
317.236 446.572 li
317.584 446.572 317.861 446.467 318.104 446.225 cv
318.348 445.98 318.451 445.705 318.485 445.322 cv
cp
320.43 445.461 mo
320.43 446.189 320.187 446.814 319.631 447.369 cv
319.146 447.889 318.52 448.132 317.722 448.168 cv
304.205 448.168 li
304.205 439.284 li
306.149 439.284 li
306.149 441.504 li
317.722 441.504 li
318.485 441.504 319.111 441.748 319.631 442.302 cv
320.151 442.822 320.395 443.448 320.43 444.211 cv
320.43 445.461 li
f
343.574 445.461 mo
343.574 446.189 343.332 446.814 342.776 447.369 cv
342.256 447.889 341.631 448.132 340.867 448.168 cv
334.465 448.168 li
333.807 448.168 333.25 447.96 332.73 447.542 cv
332.244 447.96 331.654 448.168 330.96 448.168 cv
324.559 448.168 li
323.83 448.168 323.205 447.925 322.649 447.369 cv
322.129 446.847 321.886 446.225 321.852 445.461 cv
321.852 441.471 li
323.795 441.471 li
323.795 445.322 li
323.795 445.668 323.9 445.946 324.176 446.225 cv
324.42 446.432 324.697 446.536 325.08 446.572 cv
330.475 446.572 li
330.822 446.572 331.1 446.467 331.342 446.225 cv
331.584 445.98 331.689 445.705 331.723 445.322 cv
331.723 441.471 li
333.702 441.471 li
333.702 445.322 li
333.702 445.668 333.807 445.946 334.049 446.225 cv
334.292 446.432 334.569 446.536 334.951 446.572 cv
340.381 446.572 li
340.729 446.572 341.006 446.467 341.25 446.225 cv
341.492 445.98 341.596 445.705 341.631 445.322 cv
341.631 441.471 li
343.574 441.471 li
343.574 445.461 li
f
359.274 445.303 mo
359.274 444.296 li
359.274 443.949 359.17 443.671 358.892 443.429 cv
358.649 443.185 358.371 443.083 357.99 443.047 cv
348.291 443.047 li
347.944 443.047 347.666 443.152 347.389 443.429 cv
347.145 443.637 347.042 443.916 347.007 444.296 cv
347.007 445.303 li
347.007 445.65 347.111 445.927 347.389 446.206 cv
347.633 446.414 347.91 446.518 348.291 446.551 cv
357.99 446.551 li
358.338 446.551 358.615 446.448 358.892 446.206 cv
359.135 445.961 359.24 445.684 359.274 445.303 cv
cp
361.217 445.44 mo
361.217 446.171 360.975 446.795 360.418 447.349 cv
359.9 447.871 359.274 448.113 358.511 448.148 cv
347.77 448.148 li
347.042 448.148 346.417 447.905 345.862 447.349 cv
345.342 446.83 345.098 446.206 345.064 445.44 cv
345.064 444.157 li
345.064 443.429 345.307 442.805 345.862 442.248 cv
346.382 441.728 347.007 441.484 347.77 441.45 cv
358.511 441.45 li
359.24 441.45 359.865 441.693 360.418 442.248 cv
360.939 442.769 361.182 443.393 361.217 444.157 cv
361.217 445.44 li
f
375.783 443.066 mo
365.834 443.066 li
365.488 443.066 365.211 443.169 364.933 443.448 cv
364.689 443.656 364.585 443.934 364.551 444.316 cv
364.551 448.168 li
362.607 448.168 li
362.607 444.177 li
362.607 443.448 362.85 442.822 363.405 442.266 cv
363.926 441.748 364.551 441.504 365.314 441.471 cv
375.783 441.471 li
375.783 443.066 li
f
391.531 442.65 mo
391.531 443.413 391.254 444.037 390.699 444.593 cv
391.254 445.113 391.531 445.773 391.531 446.572 cv
391.531 448.168 li
389.555 448.168 li
389.555 446.71 li
389.555 446.362 389.45 446.086 389.172 445.841 cv
388.964 445.598 388.688 445.495 388.304 445.461 cv
379.272 445.461 li
379.272 448.168 li
377.329 448.168 li
377.329 439.284 li
379.272 439.284 li
379.272 443.759 li
388.304 443.759 li
388.652 443.759 388.93 443.656 389.172 443.413 cv
389.414 443.169 389.518 442.891 389.555 442.51 cv
389.555 441.504 li
391.531 441.504 li
391.531 442.65 li
f
393.202 447.037 mo
393.06 447.037 li
393.06 447.303 li
393.202 447.303 li
393.287 447.303 393.347 447.248 393.347 447.171 cv
393.347 447.093 393.287 447.037 393.202 447.037 cv
cp
393.352 447.708 mo
393.177 447.395 li
393.06 447.395 li
393.06 447.708 li
392.954 447.708 li
392.954 446.942 li
393.215 446.942 li
393.347 446.942 393.455 447.042 393.455 447.171 cv
393.455 447.283 393.385 447.352 393.292 447.381 cv
393.475 447.708 li
393.352 447.708 li
cp
393.182 446.729 mo
392.857 446.729 392.596 446.998 392.596 447.326 cv
392.596 447.654 392.857 447.921 393.182 447.921 cv
393.505 447.921 393.771 447.654 393.771 447.326 cv
393.771 446.998 393.505 446.729 393.182 446.729 cv
cp
393.182 448.023 mo
392.796 448.023 392.483 447.712 392.483 447.326 cv
392.483 446.94 392.796 446.627 393.182 446.627 cv
393.567 446.627 393.879 446.94 393.879 447.326 cv
393.879 447.712 393.567 448.023 393.182 448.023 cv
f
252.647 447.565 mo
251.604 447.565 250.653 447.186 249.94 446.473 cv
249.229 445.762 248.802 444.764 248.802 443.767 cv
248.802 442.722 249.229 441.774 249.94 441.061 cv
250.653 440.348 251.604 439.922 252.647 439.922 cv
253.644 439.922 254.593 440.348 255.353 441.061 cv
256.065 441.774 256.445 442.722 256.445 443.767 cv
256.445 445.856 254.736 447.565 252.647 447.565 cv
cp
236.602 447.565 mo
236.014 447.565 235.434 447.418 234.904 447.165 cv
234.555 446.979 234.227 446.757 233.944 446.474 cv
233.232 445.762 232.805 444.813 232.805 443.769 cv
232.805 442.772 233.232 441.774 233.944 441.063 cv
234.656 440.35 235.605 439.97 236.65 439.97 cv
237.688 439.97 238.631 440.394 239.318 441.075 cv
240.022 441.786 240.446 442.729 240.446 443.767 cv
240.446 445.856 238.69 447.565 236.602 447.565 cv
cp
223.311 446.474 mo
222.598 447.186 221.648 447.614 220.604 447.614 cv
219.607 447.614 218.61 447.186 217.898 446.474 cv
217.187 445.762 216.807 444.813 216.807 443.769 cv
216.807 442.772 217.187 441.774 217.898 441.063 cv
218.61 440.35 219.607 439.97 220.604 439.97 cv
222.693 439.97 224.449 441.679 224.449 443.769 cv
224.449 444.813 224.022 445.762 223.311 446.474 cv
cp
256.967 439.448 mo
255.781 438.309 254.262 437.692 252.647 437.692 cv
250.369 437.692 248.422 438.925 247.377 440.729 cv
246.523 440.254 245.525 440.016 244.529 440.016 cv
243.589 440.016 242.651 440.251 241.85 440.624 cv
241.6 440.201 241.308 439.801 240.969 439.448 cv
240.389 438.893 239.697 438.45 238.945 438.145 cv
238.92 438.136 238.893 438.128 238.867 438.118 cv
238.707 438.055 238.546 437.997 238.381 437.949 cv
238.368 437.944 238.355 437.943 238.343 437.938 cv
237.795 437.78 237.226 437.692 236.65 437.692 cv
236.643 437.692 236.634 437.692 236.625 437.692 cv
236.617 437.692 236.609 437.692 236.602 437.692 cv
233.23 437.692 230.525 440.397 230.525 443.767 cv
230.525 444.06 230.552 444.351 230.593 444.637 cv
229.981 445.006 229.28 445.239 228.532 445.239 cv
227.867 445.239 227.203 445.049 226.586 444.764 cv
226.633 444.434 226.681 444.1 226.681 443.769 cv
226.681 442.154 226.064 440.587 224.924 439.448 cv
223.785 438.357 222.219 437.692 220.604 437.692 cv
218.99 437.692 217.471 438.357 216.283 439.448 cv
215.145 440.633 214.527 442.154 214.527 443.769 cv
214.527 447.139 217.233 449.844 220.604 449.844 cv
222.219 449.844 223.785 449.226 224.924 448.088 cv
225.256 447.708 225.59 447.329 225.826 446.901 cv
226.633 447.282 227.582 447.52 228.532 447.52 cv
229.515 447.52 230.496 447.286 231.342 446.823 cv
231.6 447.275 231.91 447.7 232.281 448.088 cv
233.061 448.804 233.985 449.333 234.984 449.615 cv
235.01 449.622 235.037 449.627 235.063 449.635 cv
235.289 449.696 235.519 449.743 235.75 449.776 cv
235.783 449.781 235.816 449.786 235.849 449.791 cv
236.098 449.823 236.348 449.844 236.602 449.844 cv
236.61 449.844 236.619 449.843 236.629 449.843 cv
236.636 449.843 236.643 449.844 236.65 449.844 cv
238.264 449.844 239.783 449.226 240.969 448.088 cv
242.062 446.949 242.727 445.429 242.727 443.769 cv
242.727 443.425 242.689 443.085 242.632 442.75 cv
243.234 442.478 243.882 442.295 244.529 442.295 cv
245.289 442.295 246.002 442.534 246.618 442.913 cv
246.57 443.199 246.57 443.435 246.57 443.767 cv
246.57 445.381 247.188 446.901 248.326 448.088 cv
249.466 449.178 250.985 449.844 252.647 449.844 cv
254.262 449.844 255.827 449.178 256.967 448.088 cv
258.059 446.949 258.724 445.381 258.724 443.767 cv
258.724 442.106 258.059 440.587 256.967 439.448 cv
f
236.625 441.394 mo
235.314 441.394 234.252 442.458 234.252 443.767 cv
234.252 445.08 235.314 446.14 236.625 446.14 cv
237.936 446.14 239 445.08 239 443.767 cv
239 442.458 237.936 441.394 236.625 441.394 cv
f
402.319 497.571 mo
402.319 503.278 397.693 507.904 391.986 507.904 cv
218.985 507.904 li
213.279 507.904 208.652 503.278 208.652 497.571 cv
208.652 491.864 213.279 487.238 218.985 487.238 cv
391.986 487.238 li
397.693 487.238 402.319 491.864 402.319 497.571 cv
0.960785 0.94902 0.29804 0.184314 cmyk
f
284.759 499.307 mo
284.759 500.035 284.516 500.66 283.961 501.214 cv
283.439 501.735 282.814 501.978 282.052 502.013 cv
275.65 502.013 li
274.99 502.013 274.436 501.805 273.915 501.388 cv
273.428 501.805 272.84 502.013 272.146 502.013 cv
266.259 502.013 li
265.531 502.013 264.905 501.771 264.351 501.214 cv
263.83 500.693 263.588 500.071 263.553 499.307 cv
263.553 495.317 li
265.495 495.317 li
265.495 499.168 li
265.495 499.514 265.6 499.792 265.877 500.071 cv
266.121 500.278 266.397 500.381 266.779 500.418 cv
271.66 500.418 li
272.006 500.418 272.284 500.313 272.527 500.071 cv
272.77 499.826 272.873 499.55 272.908 499.168 cv
272.908 495.317 li
274.887 495.317 li
274.887 499.168 li
274.887 499.514 274.99 499.792 275.233 500.071 cv
275.477 500.278 275.754 500.381 276.135 500.418 cv
281.566 500.418 li
281.912 500.418 282.19 500.313 282.434 500.071 cv
282.676 499.826 282.78 499.55 282.814 499.168 cv
282.814 495.317 li
284.759 495.317 li
284.759 499.307 li
0 0 0 0 cmyk
f
302.439 502.013 mo
288.923 502.013 li
288.193 502.013 287.569 501.771 287.014 501.214 cv
286.494 500.693 286.25 500.071 286.216 499.307 cv
286.216 498.057 li
286.216 497.328 286.459 496.703 287.014 496.148 cv
287.535 495.628 288.159 495.384 288.923 495.35 cv
302.439 495.35 li
302.439 496.946 li
300.564 499.514 li
298.621 499.514 li
300.461 496.946 li
289.442 496.946 li
289.096 496.946 288.818 497.051 288.541 497.328 cv
288.297 497.537 288.193 497.813 288.159 498.195 cv
288.159 499.168 li
288.159 499.514 288.264 499.792 288.541 500.071 cv
288.783 500.278 289.062 500.381 289.442 500.418 cv
302.439 500.418 li
302.439 502.013 li
f
318.485 499.168 mo
318.485 498.195 li
318.485 497.848 318.382 497.571 318.104 497.328 cv
317.896 497.084 317.618 496.981 317.236 496.946 cv
306.149 496.946 li
306.149 500.418 li
317.236 500.418 li
317.584 500.418 317.861 500.313 318.104 500.071 cv
318.348 499.826 318.451 499.55 318.485 499.168 cv
cp
320.43 499.307 mo
320.43 500.035 320.187 500.66 319.631 501.214 cv
319.146 501.735 318.52 501.978 317.722 502.013 cv
304.205 502.013 li
304.205 493.129 li
306.149 493.129 li
306.149 495.35 li
317.722 495.35 li
318.485 495.35 319.111 495.593 319.631 496.148 cv
320.151 496.668 320.395 497.293 320.43 498.057 cv
320.43 499.307 li
f
343.574 499.307 mo
343.574 500.035 343.332 500.66 342.776 501.214 cv
342.256 501.735 341.631 501.978 340.867 502.013 cv
334.465 502.013 li
333.807 502.013 333.25 501.805 332.73 501.388 cv
332.244 501.805 331.654 502.013 330.96 502.013 cv
324.559 502.013 li
323.83 502.013 323.205 501.771 322.649 501.214 cv
322.129 500.693 321.886 500.071 321.852 499.307 cv
321.852 495.317 li
323.795 495.317 li
323.795 499.168 li
323.795 499.514 323.9 499.792 324.176 500.071 cv
324.42 500.278 324.697 500.381 325.08 500.418 cv
330.475 500.418 li
330.822 500.418 331.1 500.313 331.342 500.071 cv
331.584 499.826 331.689 499.55 331.723 499.168 cv
331.723 495.317 li
333.702 495.317 li
333.702 499.168 li
333.702 499.514 333.807 499.792 334.049 500.071 cv
334.292 500.278 334.569 500.381 334.951 500.418 cv
340.381 500.418 li
340.729 500.418 341.006 500.313 341.25 500.071 cv
341.492 499.826 341.596 499.55 341.631 499.168 cv
341.631 495.317 li
343.574 495.317 li
343.574 499.307 li
f
359.274 499.149 mo
359.274 498.142 li
359.274 497.794 359.17 497.517 358.892 497.275 cv
358.649 497.031 358.371 496.928 357.99 496.893 cv
348.291 496.893 li
347.944 496.893 347.666 496.998 347.389 497.275 cv
347.145 497.483 347.042 497.761 347.007 498.142 cv
347.007 499.149 li
347.007 499.496 347.111 499.773 347.389 500.051 cv
347.633 500.259 347.91 500.364 348.291 500.397 cv
357.99 500.397 li
358.338 500.397 358.615 500.293 358.892 500.051 cv
359.135 499.807 359.24 499.53 359.274 499.149 cv
cp
361.217 499.286 mo
361.217 500.017 360.975 500.641 360.418 501.195 cv
359.9 501.716 359.274 501.958 358.511 501.994 cv
347.77 501.994 li
347.042 501.994 346.417 501.75 345.862 501.195 cv
345.342 500.675 345.098 500.051 345.064 499.286 cv
345.064 498.002 li
345.064 497.275 345.307 496.651 345.862 496.093 cv
346.382 495.574 347.007 495.33 347.77 495.295 cv
358.511 495.295 li
359.24 495.295 359.865 495.539 360.418 496.093 cv
360.939 496.615 361.182 497.239 361.217 498.002 cv
361.217 499.286 li
f
375.783 496.912 mo
365.834 496.912 li
365.488 496.912 365.211 497.015 364.933 497.293 cv
364.689 497.501 364.585 497.78 364.551 498.162 cv
364.551 502.013 li
362.607 502.013 li
362.607 498.023 li
362.607 497.293 362.85 496.668 363.405 496.112 cv
363.926 495.593 364.551 495.35 365.314 495.317 cv
375.783 495.317 li
375.783 496.912 li
f
391.531 496.496 mo
391.531 497.258 391.254 497.882 390.699 498.439 cv
391.254 498.958 391.531 499.619 391.531 500.418 cv
391.531 502.013 li
389.555 502.013 li
389.555 500.555 li
389.555 500.208 389.45 499.932 389.172 499.687 cv
388.964 499.444 388.688 499.34 388.304 499.307 cv
379.272 499.307 li
379.272 502.013 li
377.329 502.013 li
377.329 493.129 li
379.272 493.129 li
379.272 497.605 li
388.304 497.605 li
388.652 497.605 388.93 497.501 389.172 497.258 cv
389.414 497.015 389.518 496.737 389.555 496.356 cv
389.555 495.35 li
391.531 495.35 li
391.531 496.496 li
f
393.202 500.882 mo
393.06 500.882 li
393.06 501.149 li
393.202 501.149 li
393.287 501.149 393.347 501.093 393.347 501.017 cv
393.347 500.939 393.287 500.882 393.202 500.882 cv
cp
393.352 501.553 mo
393.177 501.241 li
393.06 501.241 li
393.06 501.553 li
392.954 501.553 li
392.954 500.788 li
393.215 500.788 li
393.347 500.788 393.455 500.888 393.455 501.017 cv
393.455 501.128 393.385 501.198 393.292 501.227 cv
393.475 501.553 li
393.352 501.553 li
cp
393.182 500.575 mo
392.857 500.575 392.596 500.843 392.596 501.171 cv
392.596 501.5 392.857 501.767 393.182 501.767 cv
393.505 501.767 393.771 501.5 393.771 501.171 cv
393.771 500.843 393.505 500.575 393.182 500.575 cv
cp
393.182 501.869 mo
392.796 501.869 392.483 501.558 392.483 501.171 cv
392.483 500.786 392.796 500.473 393.182 500.473 cv
393.567 500.473 393.879 500.786 393.879 501.171 cv
393.879 501.558 393.567 501.869 393.182 501.869 cv
f
252.647 501.411 mo
251.604 501.411 250.653 501.032 249.94 500.319 cv
249.229 499.608 248.802 498.61 248.802 497.613 cv
248.802 496.568 249.229 495.62 249.94 494.907 cv
250.653 494.194 251.604 493.768 252.647 493.768 cv
253.644 493.768 254.593 494.194 255.353 494.907 cv
256.065 495.62 256.445 496.568 256.445 497.613 cv
256.445 499.702 254.736 501.411 252.647 501.411 cv
cp
236.602 501.411 mo
236.014 501.411 235.434 501.264 234.904 501.01 cv
234.555 500.825 234.227 500.603 233.944 500.32 cv
233.232 499.608 232.805 498.659 232.805 497.615 cv
232.805 496.618 233.232 495.62 233.944 494.909 cv
234.656 494.196 235.605 493.816 236.65 493.816 cv
237.688 493.816 238.631 494.24 239.318 494.92 cv
240.022 495.631 240.446 496.575 240.446 497.613 cv
240.446 499.702 238.69 501.411 236.602 501.411 cv
cp
223.311 500.32 mo
222.598 501.032 221.648 501.46 220.604 501.46 cv
219.607 501.46 218.61 501.032 217.898 500.32 cv
217.187 499.608 216.807 498.659 216.807 497.615 cv
216.807 496.618 217.187 495.62 217.898 494.909 cv
218.61 494.196 219.607 493.816 220.604 493.816 cv
222.693 493.816 224.449 495.525 224.449 497.615 cv
224.449 498.659 224.022 499.608 223.311 500.32 cv
cp
256.967 493.293 mo
255.781 492.155 254.262 491.538 252.647 491.538 cv
250.369 491.538 248.422 492.771 247.377 494.575 cv
246.523 494.1 245.525 493.862 244.529 493.862 cv
243.589 493.862 242.651 494.097 241.85 494.469 cv
241.6 494.046 241.308 493.647 240.969 493.293 cv
240.389 492.739 239.697 492.295 238.945 491.991 cv
238.92 491.982 238.893 491.974 238.867 491.963 cv
238.707 491.901 238.546 491.842 238.381 491.794 cv
238.368 491.79 238.355 491.789 238.343 491.784 cv
237.795 491.626 237.226 491.538 236.65 491.538 cv
236.643 491.538 236.634 491.538 236.625 491.538 cv
236.617 491.538 236.609 491.538 236.602 491.538 cv
233.23 491.538 230.525 494.243 230.525 497.613 cv
230.525 497.906 230.552 498.197 230.593 498.483 cv
229.981 498.852 229.28 499.084 228.532 499.084 cv
227.867 499.084 227.203 498.895 226.586 498.61 cv
226.633 498.28 226.681 497.946 226.681 497.615 cv
226.681 496 226.064 494.433 224.924 493.293 cv
223.785 492.203 222.219 491.538 220.604 491.538 cv
218.99 491.538 217.471 492.203 216.283 493.293 cv
215.145 494.479 214.527 496 214.527 497.615 cv
214.527 500.985 217.233 503.69 220.604 503.69 cv
222.219 503.69 223.785 503.072 224.924 501.934 cv
225.256 501.553 225.59 501.174 225.826 500.747 cv
226.633 501.127 227.582 501.366 228.532 501.366 cv
229.515 501.366 230.496 501.131 231.342 500.668 cv
231.6 501.121 231.91 501.545 232.281 501.934 cv
233.061 502.65 233.985 503.178 234.984 503.46 cv
235.01 503.467 235.037 503.473 235.063 503.481 cv
235.289 503.542 235.519 503.588 235.75 503.622 cv
235.783 503.626 235.816 503.631 235.849 503.636 cv
236.098 503.668 236.348 503.69 236.602 503.69 cv
236.61 503.69 236.619 503.689 236.629 503.689 cv
236.636 503.689 236.643 503.69 236.65 503.69 cv
238.264 503.69 239.783 503.072 240.969 501.934 cv
242.062 500.794 242.727 499.275 242.727 497.615 cv
242.727 497.271 242.689 496.931 242.632 496.596 cv
243.234 496.324 243.882 496.141 244.529 496.141 cv
245.289 496.141 246.002 496.379 246.618 496.758 cv
246.57 497.044 246.57 497.281 246.57 497.613 cv
246.57 499.227 247.188 500.747 248.326 501.934 cv
249.466 503.024 250.985 503.69 252.647 503.69 cv
254.262 503.69 255.827 503.024 256.967 501.934 cv
258.059 500.794 258.724 499.227 258.724 497.613 cv
258.724 495.952 258.059 494.433 256.967 493.293 cv
0.196079 0.219608 0.505883 0.0470589 cmyk
f
236.625 495.24 mo
235.314 495.24 234.252 496.303 234.252 497.613 cv
234.252 498.925 235.314 499.986 236.625 499.986 cv
237.936 499.986 239 498.925 239 497.613 cv
239 496.303 237.936 495.24 236.625 495.24 cv
f
21.0918 532.5 mo
20.5953 532.5 li
19.4888 528.51 li
18.3829 532.5 li
17.8863 532.5 li
16.6119 527.516 li
17.1792 527.516 li
18.1519 531.535 li
19.251 527.516 li
19.7271 527.516 li
20.8262 531.535 li
21.7989 527.516 li
22.3658 527.516 li
21.0918 532.5 li
0 0 0 1 cmyk
f
23.1988 532.5 mo
23.1988 527.516 li
26.293 527.516 li
26.293 527.993 li
23.731 527.993 li
23.731 529.75 li
25.9151 529.75 li
25.9151 530.225 li
23.731 530.225 li
23.731 532.025 li
26.293 532.025 li
26.293 532.5 li
23.1988 532.5 li
f
29.2891 530.198 mo
27.9307 530.198 li
27.9307 532.025 li
29.2891 532.025 li
29.9048 532.025 30.2901 531.668 30.2901 531.108 cv
30.2901 530.547 29.9048 530.198 29.2891 530.198 cv
cp
29.233 527.993 mo
27.9307 527.993 li
27.9307 529.721 li
29.233 529.721 li
29.7857 529.721 30.2129 529.449 30.2129 528.853 cv
30.2129 528.258 29.7857 527.993 29.233 527.993 cv
cp
29.3379 532.5 mo
27.399 532.5 li
27.399 527.516 li
29.275 527.516 li
30.1431 527.516 30.7447 528.013 30.7447 528.846 cv
30.7447 529.372 30.4297 529.785 30.0098 529.939 cv
30.4859 530.114 30.8218 530.527 30.8218 531.122 cv
30.8218 532.025 30.2198 532.5 29.3379 532.5 cv
f
35.9458 532.5 mo
35.4488 532.5 li
34.3428 528.51 li
33.2369 532.5 li
32.7398 532.5 li
31.4659 527.516 li
32.0328 527.516 li
33.0059 531.535 li
34.105 527.516 li
34.5811 527.516 li
35.6797 531.535 li
36.6529 527.516 li
37.2198 527.516 li
35.9458 532.5 li
f
40.3975 528.307 mo
40.1807 528.084 39.8658 527.951 39.5367 527.951 cv
39.2076 527.951 38.8926 528.084 38.6758 528.307 cv
38.3609 528.629 38.3257 528.965 38.3257 530.008 cv
38.3257 531.051 38.3609 531.387 38.6758 531.71 cv
38.8926 531.933 39.2076 532.067 39.5367 532.067 cv
39.8658 532.067 40.1807 531.933 40.3975 531.71 cv
40.7129 531.387 40.7476 531.051 40.7476 530.008 cv
40.7476 528.965 40.7129 528.629 40.3975 528.307 cv
cp
40.8106 532.025 mo
40.4747 532.361 40.0337 532.542 39.5367 532.542 cv
39.0396 532.542 38.5987 532.361 38.2627 532.025 cv
37.7935 531.555 37.7935 531.066 37.7935 530.008 cv
37.7935 528.952 37.7935 528.461 38.2627 527.993 cv
38.5987 527.657 39.0396 527.474 39.5367 527.474 cv
40.0337 527.474 40.4747 527.657 40.8106 527.993 cv
41.2798 528.461 41.2798 528.952 41.2798 530.008 cv
41.2798 531.066 41.2798 531.555 40.8106 532.025 cv
f
44.3946 527.993 mo
43.0645 527.993 li
43.0645 529.82 li
44.3946 529.82 li
44.9756 529.82 45.3887 529.518 45.3887 528.91 cv
45.3887 528.3 44.9756 527.993 44.3946 527.993 cv
cp
45.3956 532.5 mo
44.2618 530.289 li
43.0645 530.289 li
43.0645 532.5 li
42.5328 532.5 li
42.5328 527.516 li
44.4439 527.516 li
45.3116 527.516 45.9205 528.042 45.9205 528.903 cv
45.9205 529.63 45.4795 530.107 44.8355 530.24 cv
46.0186 532.5 li
45.3956 532.5 li
f
50.2256 532.5 mo
48.7066 529.847 li
47.6568 531.108 li
47.6568 532.5 li
47.1246 532.5 li
47.1246 527.516 li
47.6568 527.516 li
47.6568 530.379 li
49.9805 527.516 li
50.6314 527.516 li
49.0635 529.442 li
50.8555 532.5 li
50.2256 532.5 li
f
53.4175 532.5 mo
53.4175 527.516 li
53.9498 527.516 li
53.9498 532.025 li
56.4976 532.025 li
56.4976 532.5 li
53.4175 532.5 li
f
59.5904 528.307 mo
59.3736 528.084 59.0586 527.951 58.7295 527.951 cv
58.4004 527.951 58.0855 528.084 57.8687 528.307 cv
57.5538 528.629 57.5186 528.965 57.5186 530.008 cv
57.5186 531.051 57.5538 531.387 57.8687 531.71 cv
58.0855 531.933 58.4004 532.067 58.7295 532.067 cv
59.0586 532.067 59.3736 531.933 59.5904 531.71 cv
59.9058 531.387 59.9405 531.051 59.9405 530.008 cv
59.9405 528.965 59.9058 528.629 59.5904 528.307 cv
cp
60.0035 532.025 mo
59.6675 532.361 59.2266 532.542 58.7295 532.542 cv
58.2325 532.542 57.7916 532.361 57.4556 532.025 cv
56.9864 531.555 56.9864 531.066 56.9864 530.008 cv
56.9864 528.952 56.9864 528.461 57.4556 527.993 cv
57.7916 527.657 58.2325 527.474 58.7295 527.474 cv
59.2266 527.474 59.6675 527.657 60.0035 527.993 cv
60.4727 528.461 60.4727 528.952 60.4727 530.008 cv
60.4727 531.066 60.4727 531.555 60.0035 532.025 cv
f
64.6094 531.968 mo
64.2593 532.346 63.7906 532.542 63.2794 532.542 cv
62.7896 532.542 62.3414 532.361 62.0054 532.025 cv
61.5367 531.555 61.5367 531.066 61.5367 530.008 cv
61.5367 528.952 61.5367 528.461 62.0054 527.993 cv
62.3414 527.657 62.7828 527.474 63.2794 527.474 cv
64.2315 527.474 64.8755 528.09 65.0225 528.965 cv
64.4908 528.965 li
64.3506 528.335 63.9024 527.951 63.2794 527.951 cv
62.9507 527.951 62.6353 528.084 62.4185 528.307 cv
62.1036 528.629 62.0684 528.965 62.0684 530.008 cv
62.0684 531.051 62.1036 531.394 62.4185 531.716 cv
62.6353 531.941 62.9507 532.067 63.2794 532.067 cv
63.6436 532.067 63.9937 531.919 64.2247 531.639 cv
64.4273 531.394 64.5044 531.122 64.5044 530.737 cv
64.5044 530.359 li
63.2794 530.359 li
63.2794 529.889 li
65.0367 529.889 li
65.0367 530.68 li
65.0367 531.254 64.9175 531.639 64.6094 531.968 cv
f
68.6905 528.307 mo
68.4737 528.084 68.1587 527.951 67.8296 527.951 cv
67.5005 527.951 67.1856 528.084 66.9683 528.307 cv
66.6534 528.629 66.6187 528.965 66.6187 530.008 cv
66.6187 531.051 66.6534 531.387 66.9683 531.71 cv
67.1856 531.933 67.5005 532.067 67.8296 532.067 cv
68.1587 532.067 68.4737 531.933 68.6905 531.71 cv
69.0054 531.387 69.0406 531.051 69.0406 530.008 cv
69.0406 528.965 69.0054 528.629 68.6905 528.307 cv
cp
69.1036 532.025 mo
68.7676 532.361 68.3267 532.542 67.8296 532.542 cv
67.3326 532.542 66.8916 532.361 66.5557 532.025 cv
66.0865 531.555 66.0865 531.066 66.0865 530.008 cv
66.0865 528.952 66.0865 528.461 66.5557 527.993 cv
66.8916 527.657 67.3326 527.474 67.8296 527.474 cv
68.3267 527.474 68.7676 527.657 69.1036 527.993 cv
69.5723 528.461 69.5723 528.952 69.5723 530.008 cv
69.5723 531.066 69.5723 531.555 69.1036 532.025 cv
f
74.1226 532.542 mo
73.6324 532.542 73.1846 532.361 72.8482 532.025 cv
72.3794 531.555 72.3794 531.066 72.3794 530.008 cv
72.3794 528.952 72.3794 528.461 72.8482 527.993 cv
73.1846 527.657 73.6324 527.474 74.1226 527.474 cv
75.0186 527.474 75.6836 528.02 75.8516 528.958 cv
75.3052 528.958 li
75.1724 528.349 74.7457 527.951 74.1226 527.951 cv
73.7935 527.951 73.4786 528.077 73.2613 528.3 cv
72.9463 528.623 72.9117 528.965 72.9117 530.008 cv
72.9117 531.051 72.9463 531.394 73.2613 531.716 cv
73.4786 531.941 73.7935 532.067 74.1226 532.067 cv
74.7457 532.067 75.1866 531.668 75.3194 531.058 cv
75.8516 531.058 li
75.6905 531.997 75.0113 532.542 74.1226 532.542 cv
f
79.4424 528.307 mo
79.2252 528.084 78.9102 527.951 78.5816 527.951 cv
78.2525 527.951 77.9376 528.084 77.7203 528.307 cv
77.4053 528.629 77.3702 528.965 77.3702 530.008 cv
77.3702 531.051 77.4053 531.387 77.7203 531.71 cv
77.9376 531.933 78.2525 532.067 78.5816 532.067 cv
78.9102 532.067 79.2252 531.933 79.4424 531.71 cv
79.7574 531.387 79.7925 531.051 79.7925 530.008 cv
79.7925 528.965 79.7574 528.629 79.4424 528.307 cv
cp
79.8555 532.025 mo
79.5196 532.361 79.0782 532.542 78.5816 532.542 cv
78.0845 532.542 77.6436 532.361 77.3072 532.025 cv
76.8384 531.555 76.8384 531.066 76.8384 530.008 cv
76.8384 528.952 76.8384 528.461 77.3072 527.993 cv
77.6436 527.657 78.0845 527.474 78.5816 527.474 cv
79.0782 527.474 79.5196 527.657 79.8555 527.993 cv
80.3243 528.461 80.3243 528.952 80.3243 530.008 cv
80.3243 531.066 80.3243 531.555 79.8555 532.025 cv
f
84.7554 532.5 mo
82.1094 528.503 li
82.1094 532.5 li
81.5772 532.5 li
81.5772 527.516 li
82.0811 527.516 li
84.7271 531.5 li
84.7271 527.516 li
85.2593 527.516 li
85.2593 532.5 li
84.7554 532.5 li
f
88.2554 532.542 mo
87.7652 532.542 87.3174 532.361 86.9815 532.025 cv
86.5123 531.555 86.5123 531.066 86.5123 530.008 cv
86.5123 528.952 86.5123 528.461 86.9815 527.993 cv
87.3174 527.657 87.7652 527.474 88.2554 527.474 cv
89.1514 527.474 89.8165 528.02 89.9844 528.958 cv
89.438 528.958 li
89.3052 528.349 88.8785 527.951 88.2554 527.951 cv
87.9263 527.951 87.6114 528.077 87.3941 528.3 cv
87.0792 528.623 87.0445 528.965 87.0445 530.008 cv
87.0445 531.051 87.0792 531.394 87.3941 531.716 cv
87.6114 531.941 87.9263 532.067 88.2554 532.067 cv
88.8785 532.067 89.3194 531.668 89.4522 531.058 cv
89.9844 531.058 li
89.8233 531.997 89.1441 532.542 88.2554 532.542 cv
f
91.1602 532.5 mo
91.1602 527.516 li
94.2544 527.516 li
94.2544 527.993 li
91.6924 527.993 li
91.6924 529.75 li
93.876 529.75 li
93.876 530.225 li
91.6924 530.225 li
91.6924 532.025 li
94.2544 532.025 li
94.2544 532.5 li
91.1602 532.5 li
f
97.1661 527.993 mo
95.8921 527.993 li
95.8921 529.973 li
97.1661 529.973 li
97.7891 529.973 98.2232 529.637 98.2232 528.979 cv
98.2232 528.322 97.7891 527.993 97.1661 527.993 cv
cp
97.2154 530.45 mo
95.8921 530.45 li
95.8921 532.5 li
95.3604 532.5 li
95.3604 527.516 li
97.2154 527.516 li
98.125 527.516 98.7554 528.084 98.7554 528.979 cv
98.7554 529.876 98.125 530.45 97.2154 530.45 cv
f
101.233 527.993 mo
101.233 532.5 li
100.702 532.5 li
100.702 527.993 li
99.2593 527.993 li
99.2593 527.516 li
102.676 527.516 li
102.676 527.993 li
101.233 527.993 li
f
18.3062 541 mo
18.3062 536.577 li
17.375 537.395 li
17.375 536.822 li
18.3062 536.016 li
18.8101 536.016 li
18.8101 541 li
18.3062 541 li
f
20.6299 541 mo
20.6299 540.552 li
22.5967 538.053 li
22.7862 537.808 22.877 537.591 22.877 537.319 cv
22.877 536.78 22.5547 536.422 22.0088 536.422 cv
21.5469 536.422 21.1412 536.681 21.1412 537.326 cv
20.6368 537.326 li
20.6368 536.542 21.1758 535.974 22.0088 535.974 cv
22.8282 535.974 23.3809 536.5 23.3809 537.319 cv
23.3809 537.717 23.2549 537.976 22.982 538.327 cv
21.2388 540.552 li
23.3809 540.552 li
23.3809 541 li
20.6299 541 li
f
26.2579 539.348 mo
26.2579 538.879 li
24.3399 538.879 li
24.3399 539.348 li
26.2579 539.348 li
f
28.5958 541 mo
28.5958 536.577 li
27.6646 537.395 li
27.6646 536.822 li
28.5958 536.016 li
29.0997 536.016 li
29.0997 541 li
28.5958 541 li
f
32.2496 541 mo
32.2496 536.577 li
31.3189 537.395 li
31.3189 536.822 li
32.2496 536.016 li
32.754 536.016 li
32.754 541 li
32.2496 541 li
f
34.6294 539.348 mo
34.6294 538.879 li
36.5474 538.879 li
36.5474 539.348 li
34.6294 539.348 li
f
37.5557 541 mo
37.5557 540.552 li
39.5225 538.053 li
39.7115 537.808 39.8028 537.591 39.8028 537.319 cv
39.8028 536.78 39.4805 536.422 38.9346 536.422 cv
38.4727 536.422 38.0665 536.681 38.0665 537.326 cv
37.5626 537.326 li
37.5626 536.542 38.1016 535.974 38.9346 535.974 cv
39.7535 535.974 40.3067 536.5 40.3067 537.319 cv
40.3067 537.717 40.1807 537.976 39.9078 538.327 cv
38.1646 540.552 li
40.3067 540.552 li
40.3067 541 li
37.5557 541 li
f
43.4214 537.374 mo
43.4214 536.829 43.1133 536.422 42.5606 536.422 cv
42.0074 536.422 41.6998 536.829 41.6998 537.374 cv
41.6998 539.642 li
41.6998 540.189 42.0074 540.594 42.5606 540.594 cv
43.1133 540.594 43.4214 540.189 43.4214 539.642 cv
43.4214 537.374 li
cp
42.5606 541.042 mo
41.7837 541.042 41.1954 540.497 41.1954 539.67 cv
41.1954 537.346 li
41.1954 536.52 41.7837 535.974 42.5606 535.974 cv
43.3375 535.974 43.9253 536.52 43.9253 537.346 cv
43.9253 539.67 li
43.9253 540.497 43.3375 541.042 42.5606 541.042 cv
f
47.0752 537.374 mo
47.0752 536.829 46.7676 536.422 46.2144 536.422 cv
45.6617 536.422 45.3536 536.829 45.3536 537.374 cv
45.3536 539.642 li
45.3536 540.189 45.6617 540.594 46.2144 540.594 cv
46.7676 540.594 47.0752 540.189 47.0752 539.642 cv
47.0752 537.374 li
cp
46.2144 541.042 mo
45.4376 541.042 44.8497 540.497 44.8497 539.67 cv
44.8497 537.346 li
44.8497 536.52 45.4376 535.974 46.2144 535.974 cv
46.9913 535.974 47.5796 536.52 47.5796 537.346 cv
47.5796 539.67 li
47.5796 540.497 46.9913 541.042 46.2144 541.042 cv
f
49.8472 541 mo
49.8472 536.577 li
48.9166 537.395 li
48.9166 536.822 li
49.8472 536.016 li
50.3511 536.016 li
50.3511 541 li
49.8472 541 li
f
20.1192 549.5 mo
20.1192 547.225 li
17.753 547.225 li
17.753 549.5 li
17.2212 549.5 li
17.2212 544.516 li
17.753 544.516 li
17.753 546.75 li
20.1192 546.75 li
20.1192 544.516 li
20.6509 544.516 li
20.6509 549.5 li
20.1192 549.5 li
f
23.521 545.28 mo
22.5831 547.912 li
24.4449 547.912 li
23.521 545.28 li
cp
24.9981 549.5 mo
24.5992 548.374 li
22.4219 548.374 li
22.023 549.5 li
21.4561 549.5 li
23.2901 544.516 li
23.7378 544.516 li
25.565 549.5 li
24.9981 549.5 li
f
27.4747 547.443 mo
27.4747 549.5 li
26.9429 549.5 li
26.9429 547.443 li
25.459 544.516 li
26.0328 544.516 li
27.209 546.904 li
28.3707 544.516 li
28.9449 544.516 li
27.4747 547.443 li
f
31.1846 544.993 mo
31.1846 549.5 li
30.6529 549.5 li
30.6529 544.993 li
29.211 544.993 li
29.211 544.516 li
32.627 544.516 li
32.627 544.993 li
31.1846 544.993 li
f
36.4556 549.5 mo
36.4556 547.225 li
34.0899 547.225 li
34.0899 549.5 li
33.5577 549.5 li
33.5577 544.516 li
34.0899 544.516 li
34.0899 546.75 li
36.4556 546.75 li
36.4556 544.516 li
36.9878 544.516 li
36.9878 549.5 li
36.4556 549.5 li
f
38.4297 549.5 mo
38.4297 544.516 li
41.524 544.516 li
41.524 544.993 li
38.962 544.993 li
38.962 546.75 li
41.1456 546.75 li
41.1456 547.225 li
38.962 547.225 li
38.962 549.025 li
41.524 549.025 li
41.524 549.5 li
38.4297 549.5 li
f
46.3677 549.5 mo
46.3677 545.713 li
45.0025 548.716 li
44.5479 548.716 li
43.1617 545.713 li
43.1617 549.5 li
42.6294 549.5 li
42.6294 544.516 li
43.1617 544.516 li
44.7857 548.051 li
46.3677 544.516 li
46.8995 544.516 li
46.8995 549.5 li
46.3677 549.5 li
f
52.9825 549.5 mo
52.9825 547.225 li
50.6168 547.225 li
50.6168 549.5 li
50.0845 549.5 li
50.0845 544.516 li
50.6168 544.516 li
50.6168 546.75 li
52.9825 546.75 li
52.9825 544.516 li
53.5147 544.516 li
53.5147 549.5 li
52.9825 549.5 li
f
56.3848 545.28 mo
55.4468 547.912 li
57.3086 547.912 li
56.3848 545.28 li
cp
57.8614 549.5 mo
57.4624 548.374 li
55.2857 548.374 li
54.8868 549.5 li
54.3194 549.5 li
56.1534 544.516 li
56.6016 544.516 li
58.4288 549.5 li
57.8614 549.5 li
f
61.8306 545.357 mo
61.5713 545.09 61.2354 544.993 60.8506 544.993 cv
59.7657 544.993 li
59.7657 549.025 li
60.8506 549.025 li
61.2354 549.025 61.5713 548.926 61.8306 548.661 cv
62.1734 548.303 62.1597 547.561 62.1597 546.953 cv
62.1597 546.343 62.1734 545.713 61.8306 545.357 cv
cp
62.2017 549.039 mo
61.9004 549.339 61.4595 549.5 60.9415 549.5 cv
59.2334 549.5 li
59.2334 544.516 li
60.9415 544.516 li
61.4595 544.516 61.9004 544.677 62.2017 544.978 cv
62.7193 545.497 62.6915 546.259 62.6915 546.953 cv
62.6915 547.645 62.7193 548.52 62.2017 549.039 cv
f
66.5416 545.357 mo
66.2823 545.09 65.9463 544.993 65.5616 544.993 cv
64.4766 544.993 li
64.4766 549.025 li
65.5616 549.025 li
65.9463 549.025 66.2823 548.926 66.5416 548.661 cv
66.8843 548.303 66.8707 547.561 66.8707 546.953 cv
66.8707 546.343 66.8843 545.713 66.5416 545.357 cv
cp
66.9126 549.039 mo
66.6114 549.339 66.1705 549.5 65.6524 549.5 cv
63.9444 549.5 li
63.9444 544.516 li
65.6524 544.516 li
66.1705 544.516 66.6114 544.677 66.9126 544.978 cv
67.4302 545.497 67.4024 546.259 67.4024 546.953 cv
67.4024 547.645 67.4302 548.52 66.9126 549.039 cv
f
70.0132 545.28 mo
69.0752 547.912 li
70.9371 547.912 li
70.0132 545.28 li
cp
71.4903 549.5 mo
71.0914 548.374 li
68.9141 548.374 li
68.5152 549.5 li
67.9483 549.5 li
69.7823 544.516 li
70.2305 544.516 li
72.0572 549.5 li
71.4903 549.5 li
f
75.459 545.357 mo
75.2002 545.09 74.8643 544.993 74.4791 544.993 cv
73.3941 544.993 li
73.3941 549.025 li
74.4791 549.025 li
74.8643 549.025 75.2002 548.926 75.459 548.661 cv
75.8023 548.303 75.7881 547.561 75.7881 546.953 cv
75.7881 546.343 75.8023 545.713 75.459 545.357 cv
cp
75.8301 549.039 mo
75.5294 549.339 75.0884 549.5 74.5704 549.5 cv
72.8624 549.5 li
72.8624 544.516 li
74.5704 544.516 li
75.0884 544.516 75.5294 544.677 75.8301 544.978 cv
76.3482 545.497 76.3204 546.259 76.3204 546.953 cv
76.3204 547.645 76.3482 548.52 75.8301 549.039 cv
f
17.1299 558 mo
17.1299 554.556 li
17.6338 554.556 li
17.6338 558 li
17.1299 558 li
cp
17.1021 553.577 mo
17.1021 553.009 li
17.669 553.009 li
17.669 553.577 li
17.1021 553.577 li
f
20.084 554.962 mo
19.335 554.962 19.2232 555.607 19.2232 556.25 cv
19.2232 556.894 19.335 557.539 20.084 557.539 cv
20.8331 557.539 20.938 556.894 20.938 556.25 cv
20.938 555.607 20.8331 554.962 20.084 554.962 cv
cp
20.0069 559.582 mo
19.4888 559.582 19.2022 559.45 18.8379 559.121 cv
19.167 558.798 li
19.419 559.023 19.5938 559.141 19.9927 559.141 cv
20.6578 559.141 20.938 558.672 20.938 558.084 cv
20.938 557.545 li
20.6578 557.903 20.3428 557.994 19.9722 557.994 cv
19.6221 557.994 19.3208 557.868 19.1392 557.685 cv
18.7959 557.342 18.7188 556.81 18.7188 556.25 cv
18.7188 555.691 18.7959 555.159 19.1392 554.816 cv
19.3208 554.633 19.629 554.514 19.9791 554.514 cv
20.357 554.514 20.6651 554.598 20.9449 554.962 cv
20.9449 554.556 li
21.4419 554.556 li
21.4419 558.106 li
21.4419 558.96 20.9097 559.582 20.0069 559.582 cv
f
24.9068 558 mo
24.9068 555.879 li
24.9068 555.27 24.5782 554.962 24.0601 554.962 cv
23.542 554.962 23.2061 555.278 23.2061 555.879 cv
23.2061 558 li
22.7022 558 li
22.7022 554.556 li
23.2061 554.556 li
23.2061 554.934 li
23.4507 554.655 23.7872 554.514 24.1719 554.514 cv
24.543 554.514 24.8438 554.626 25.0538 554.836 cv
25.2989 555.075 25.4112 555.397 25.4112 555.795 cv
25.4112 558 li
24.9068 558 li
f
26.6358 558 mo
26.6358 554.556 li
27.1402 554.556 li
27.1402 558 li
26.6358 558 li
cp
26.608 553.577 mo
26.608 553.009 li
27.1749 553.009 li
27.1749 553.577 li
26.608 553.577 li
f
29.3731 558 mo
28.7847 558 28.4908 557.587 28.4908 557.077 cv
28.4908 554.962 li
28.0567 554.962 li
28.0567 554.578 li
28.4908 554.578 li
28.4908 553.5 li
28.9947 553.5 li
28.9947 554.578 li
29.73 554.578 li
29.73 554.962 li
28.9947 554.962 li
28.9947 557.062 li
28.9947 557.377 29.1416 557.567 29.4639 557.567 cv
29.73 557.567 li
29.73 558 li
29.3731 558 li
f
32.7042 555.46 mo
32.5713 555.144 32.2632 554.942 31.8995 554.942 cv
31.5352 554.942 31.2276 555.144 31.0943 555.46 cv
31.0171 555.649 31.0035 555.753 30.9893 556.034 cv
32.8091 556.034 li
32.7955 555.753 32.7813 555.649 32.7042 555.46 cv
cp
30.9893 556.412 mo
30.9893 557.168 31.3462 557.601 32.0044 557.601 cv
32.4034 557.601 32.6343 557.483 32.9073 557.21 cv
33.2505 557.51 li
32.9004 557.861 32.5782 558.042 31.9903 558.042 cv
31.0806 558.042 30.4854 557.497 30.4854 556.279 cv
30.4854 555.166 31.0245 554.514 31.8995 554.514 cv
32.7886 554.514 33.3135 555.159 33.3135 556.18 cv
33.3135 556.412 li
30.9893 556.412 li
f
36.2393 555.214 mo
36.0782 555.053 35.8545 554.962 35.6094 554.962 cv
35.3643 554.962 35.1475 555.053 34.9864 555.214 cv
34.7344 555.466 34.7066 555.893 34.7066 556.279 cv
34.7066 556.664 34.7344 557.09 34.9864 557.342 cv
35.1475 557.503 35.3643 557.594 35.6094 557.594 cv
35.8545 557.594 36.0782 557.503 36.2393 557.342 cv
36.4913 557.09 36.5123 556.664 36.5123 556.279 cv
36.5123 555.893 36.4913 555.466 36.2393 555.214 cv
cp
36.5962 557.651 mo
36.3584 557.888 36.0293 558.042 35.6094 558.042 cv
35.1895 558.042 34.8604 557.888 34.6226 557.651 cv
34.2725 557.294 34.2022 556.81 34.2022 556.279 cv
34.2022 555.747 34.2725 555.263 34.6226 554.907 cv
34.8604 554.668 35.1895 554.514 35.6094 554.514 cv
36.0293 554.514 36.3584 554.668 36.5962 554.907 cv
36.9463 555.263 37.0162 555.747 37.0162 556.279 cv
37.0162 556.81 36.9463 557.294 36.5962 557.651 cv
f
40.2994 558 mo
40.2994 555.879 li
40.2994 555.27 39.9703 554.962 39.4522 554.962 cv
38.9341 554.962 38.5982 555.278 38.5982 555.879 cv
38.5982 558 li
38.0943 558 li
38.0943 554.556 li
38.5982 554.556 li
38.5982 554.934 li
38.8433 554.655 39.1792 554.514 39.5645 554.514 cv
39.9351 554.514 40.2364 554.626 40.4463 554.836 cv
40.6915 555.075 40.8033 555.397 40.8033 555.795 cv
40.8033 558 li
40.2994 558 li
f
42.8892 558 mo
42.2872 558 42.0142 557.609 42.0142 557.084 cv
42.0142 553.016 li
42.5181 553.016 li
42.5181 557.062 li
42.5181 557.399 42.6304 557.567 42.9805 557.567 cv
43.2535 557.567 li
43.2535 558 li
42.8892 558 li
f
44.6114 558 mo
44.6114 554.556 li
44.1075 554.556 li
44.1075 558 li
44.6114 558 li
cp
44.6465 553.577 mo
44.6465 553.009 li
44.0792 553.009 li
44.0792 553.577 li
44.6465 553.577 li
f
48.0831 558 mo
48.0831 555.879 li
48.0831 555.27 47.7544 554.962 47.2364 554.962 cv
46.7183 554.962 46.3824 555.278 46.3824 555.879 cv
46.3824 558 li
45.8785 558 li
45.8785 554.556 li
46.3824 554.556 li
46.3824 554.934 li
46.6275 554.655 46.9634 554.514 47.3482 554.514 cv
47.7193 554.514 48.0201 554.626 48.23 554.836 cv
48.4751 555.075 48.5875 555.397 48.5875 555.795 cv
48.5875 558 li
48.0831 558 li
f
51.8423 555.46 mo
51.709 555.144 51.4014 554.942 51.0372 554.942 cv
50.6734 554.942 50.3653 555.144 50.232 555.46 cv
50.1553 555.649 50.1412 555.753 50.127 556.034 cv
51.9473 556.034 li
51.9332 555.753 51.919 555.649 51.8423 555.46 cv
cp
50.127 556.412 mo
50.127 557.168 50.4844 557.601 51.1421 557.601 cv
51.5411 557.601 51.772 557.483 52.0455 557.21 cv
52.3882 557.51 li
52.0381 557.861 51.7164 558.042 51.1285 558.042 cv
50.2183 558.042 49.6231 557.497 49.6231 556.279 cv
49.6231 555.166 50.1622 554.514 51.0372 554.514 cv
51.9263 554.514 52.4512 555.159 52.4512 556.18 cv
52.4512 556.412 li
50.127 556.412 li
f
54.1661 558 mo
54.1661 557.342 li
53.5084 557.342 li
53.5084 558 li
54.1661 558 li
f
56.7491 558.042 mo
55.8809 558.042 55.2232 557.455 55.2232 556.279 cv
55.2232 555.102 55.8809 554.514 56.7491 554.514 cv
57.2252 554.514 57.5259 554.64 57.8834 555.026 cv
57.5401 555.347 li
57.2813 555.06 57.0782 554.962 56.7491 554.962 cv
56.4131 554.962 56.1334 555.095 55.9512 555.354 cv
55.7901 555.579 55.7271 555.844 55.7271 556.279 cv
55.7271 556.712 55.7901 556.978 55.9512 557.203 cv
56.1334 557.461 56.4131 557.594 56.7491 557.594 cv
57.0782 557.594 57.2813 557.49 57.5401 557.203 cv
57.8834 557.532 li
57.5259 557.916 57.2252 558.042 56.7491 558.042 cv
f
60.5914 555.214 mo
60.4302 555.053 60.2061 554.962 59.961 554.962 cv
59.7164 554.962 59.4991 555.053 59.3379 555.214 cv
59.086 555.466 59.0582 555.893 59.0582 556.279 cv
59.0582 556.664 59.086 557.09 59.3379 557.342 cv
59.4991 557.503 59.7164 557.594 59.961 557.594 cv
60.2061 557.594 60.4302 557.503 60.5914 557.342 cv
60.8433 557.09 60.8643 556.664 60.8643 556.279 cv
60.8643 555.893 60.8433 555.466 60.5914 555.214 cv
cp
60.9483 557.651 mo
60.71 557.888 60.3809 558.042 59.961 558.042 cv
59.5411 558.042 59.212 557.888 58.9742 557.651 cv
58.6241 557.294 58.5542 556.81 58.5542 556.279 cv
58.5542 555.747 58.6241 555.263 58.9742 554.907 cv
59.212 554.668 59.5411 554.514 59.961 554.514 cv
60.3809 554.514 60.71 554.668 60.9483 554.907 cv
61.2979 555.263 61.3682 555.747 61.3682 556.279 cv
61.3682 556.81 61.2979 557.294 60.9483 557.651 cv
f
66.8702 558 mo
66.8702 555.879 li
66.8702 555.27 66.5411 554.962 66.023 554.962 cv
65.5191 554.962 65.1622 555.278 65.1622 555.824 cv
65.1622 558 li
64.6582 558 li
64.6582 555.879 li
64.6582 555.27 64.3292 554.962 63.8111 554.962 cv
63.293 554.962 62.9502 555.278 62.9502 555.879 cv
62.9502 558 li
62.4463 558 li
62.4463 554.556 li
62.9502 554.556 li
62.9502 554.934 li
63.1949 554.655 63.5381 554.514 63.9229 554.514 cv
64.399 554.514 64.7701 554.71 64.98 555.088 cv
65.2461 554.71 65.6309 554.514 66.1143 554.514 cv
66.4849 554.514 66.793 554.633 67.003 554.836 cv
67.2481 555.075 67.3741 555.397 67.3741 555.795 cv
67.3741 558 li
66.8702 558 li
f
155.499 137.735 mo
155.499 139.944 154.763 141.838 153.078 143.524 cv
151.499 145.105 149.603 145.84 147.289 145.947 cv
127.871 145.947 li
125.871 145.947 124.186 145.314 122.607 144.05 cv
121.132 145.314 119.344 145.947 117.239 145.947 cv
99.3848 145.947 li
97.1768 145.947 95.2794 145.21 93.5958 143.524 cv
92.0186 141.942 91.2803 140.051 91.1749 137.735 cv
91.1749 125.63 li
97.0694 125.63 li
97.0694 137.312 li
97.0694 138.367 97.3853 139.208 98.2276 140.051 cv
98.9659 140.681 99.8067 140.996 100.964 141.103 cv
115.766 141.103 li
116.817 141.103 117.66 140.787 118.396 140.051 cv
119.133 139.31 119.449 138.472 119.553 137.312 cv
119.553 125.63 li
125.555 125.63 li
125.555 137.312 li
125.555 138.367 125.871 139.208 126.607 140.051 cv
127.344 140.681 128.184 140.996 129.342 141.103 cv
145.815 141.103 li
146.867 141.103 147.71 140.787 148.446 140.051 cv
149.183 139.31 149.499 138.472 149.603 137.312 cv
149.603 125.63 li
155.499 125.63 li
155.499 137.735 li
0.196079 0.219608 0.505883 0.0470589 cmyk
f
209.129 145.947 mo
168.13 145.947 li
165.919 145.947 164.026 145.21 162.34 143.524 cv
160.762 141.942 160.024 140.051 159.92 137.735 cv
159.92 133.947 li
159.92 131.735 160.656 129.837 162.34 128.155 cv
163.919 126.578 165.813 125.838 168.13 125.735 cv
209.129 125.735 li
209.129 130.575 li
203.443 138.367 li
197.549 138.367 li
203.127 130.575 li
169.708 130.575 li
168.656 130.575 167.814 130.894 166.972 131.735 cv
166.233 132.366 165.919 133.208 165.813 134.365 cv
165.813 137.312 li
165.813 138.367 166.131 139.208 166.972 140.051 cv
167.708 140.681 168.551 140.996 169.708 141.103 cv
209.129 141.103 li
209.129 145.947 li
f
257.802 137.312 mo
257.802 134.365 li
257.802 133.313 257.488 132.47 256.645 131.735 cv
256.013 130.996 255.171 130.68 254.012 130.575 cv
220.383 130.575 li
220.383 141.103 li
254.012 141.103 li
255.066 141.103 255.909 140.787 256.645 140.051 cv
257.381 139.31 257.697 138.472 257.802 137.312 cv
cp
263.697 137.735 mo
263.697 139.944 262.961 141.838 261.276 143.524 cv
259.803 145.105 257.906 145.84 255.486 145.947 cv
214.488 145.947 li
214.488 119 li
220.383 119 li
220.383 125.735 li
255.486 125.735 li
257.802 125.735 259.699 126.473 261.276 128.155 cv
262.854 129.733 263.593 131.627 263.697 133.947 cv
263.697 137.735 li
f
333.903 137.735 mo
333.903 139.944 333.166 141.838 331.481 143.524 cv
329.903 145.105 328.009 145.84 325.691 145.947 cv
306.271 145.947 li
304.273 145.947 302.588 145.314 301.01 144.05 cv
299.535 145.314 297.747 145.947 295.641 145.947 cv
276.222 145.947 li
274.012 145.947 272.117 145.21 270.433 143.524 cv
268.854 141.942 268.116 140.051 268.012 137.735 cv
268.012 125.63 li
273.906 125.63 li
273.906 137.312 li
273.906 138.367 274.224 139.208 275.064 140.051 cv
275.8 140.681 276.643 140.996 277.802 141.103 cv
294.168 141.103 li
295.219 141.103 296.062 140.787 296.798 140.051 cv
297.535 139.31 297.85 138.472 297.956 137.312 cv
297.956 125.63 li
303.957 125.63 li
303.957 137.312 li
303.957 138.367 304.273 139.208 305.007 140.051 cv
305.747 140.681 306.587 140.996 307.745 141.103 cv
324.218 141.103 li
325.27 141.103 326.112 140.787 326.851 140.051 cv
327.586 139.31 327.901 138.472 328.009 137.312 cv
328.009 125.63 li
333.903 125.63 li
333.903 137.735 li
0.960785 0.94902 0.29804 0.184314 cmyk
f
381.525 137.255 mo
381.525 134.203 li
381.525 133.15 381.207 132.308 380.365 131.572 cv
379.629 130.834 378.785 130.52 377.63 130.412 cv
348.21 130.412 li
347.156 130.412 346.315 130.73 345.474 131.572 cv
344.734 132.203 344.422 133.045 344.315 134.203 cv
344.315 137.255 li
344.315 138.308 344.631 139.15 345.474 139.993 cv
346.211 140.625 347.054 140.941 348.21 141.045 cv
377.63 141.045 li
378.683 141.045 379.526 140.728 380.365 139.993 cv
381.103 139.255 381.418 138.411 381.525 137.255 cv
cp
387.418 137.674 mo
387.418 139.889 386.681 141.783 384.995 143.465 cv
383.42 145.045 381.525 145.782 379.208 145.886 cv
346.63 145.886 li
344.422 145.886 342.526 145.147 340.842 143.465 cv
339.263 141.887 338.524 139.993 338.42 137.674 cv
338.42 133.78 li
338.42 131.572 339.157 129.678 340.842 127.992 cv
342.42 126.412 344.315 125.676 346.63 125.569 cv
379.208 125.569 li
381.418 125.569 383.315 126.307 384.995 127.992 cv
386.576 129.57 387.312 131.468 387.418 133.78 cv
387.418 137.674 li
f
431.601 130.472 mo
401.424 130.472 li
400.371 130.472 399.529 130.785 398.688 131.627 cv
397.949 132.26 397.633 133.104 397.528 134.26 cv
397.528 145.947 li
391.634 145.947 li
391.634 133.842 li
391.634 131.627 392.371 129.733 394.056 128.047 cv
395.634 126.473 397.528 125.735 399.846 125.63 cv
431.601 125.63 li
431.601 130.472 li
f
479.367 129.21 mo
479.367 131.522 478.526 133.418 476.843 135.103 cv
478.526 136.68 479.367 138.683 479.367 141.103 cv
479.367 145.947 li
473.37 145.947 li
473.37 141.525 li
473.37 140.473 473.055 139.631 472.211 138.892 cv
471.581 138.154 470.739 137.84 469.579 137.735 cv
442.181 137.735 li
442.181 145.947 li
436.286 145.947 li
436.286 119 li
442.181 119 li
442.181 132.575 li
469.579 132.575 li
470.633 132.575 471.477 132.26 472.211 131.522 cv
472.947 130.785 473.263 129.942 473.37 128.786 cv
473.37 125.735 li
479.367 125.735 li
479.367 129.21 li
f
484.438 142.514 mo
484.005 142.514 li
484.005 143.327 li
484.438 143.327 li
484.695 143.327 484.877 143.157 484.877 142.924 cv
484.877 142.689 484.695 142.514 484.438 142.514 cv
cp
484.889 144.549 mo
484.356 143.602 li
484.005 143.602 li
484.005 144.549 li
483.684 144.549 li
483.684 142.228 li
484.473 142.228 li
484.877 142.228 485.204 142.532 485.204 142.924 cv
485.204 143.263 484.993 143.474 484.707 143.561 cv
485.263 144.549 li
484.889 144.549 li
cp
484.374 141.584 mo
483.391 141.584 482.596 142.397 482.596 143.391 cv
482.596 144.386 483.391 145.199 484.374 145.199 cv
485.356 145.199 486.158 144.386 486.158 143.391 cv
486.158 142.397 485.356 141.584 484.374 141.584 cv
cp
484.374 145.509 mo
483.204 145.509 482.256 144.562 482.256 143.391 cv
482.256 142.222 483.204 141.274 484.374 141.274 cv
485.543 141.274 486.49 142.222 486.49 143.391 cv
486.49 144.562 485.543 145.509 484.374 145.509 cv
f
499.045 141.886 mo
505.853 141.886 511.491 141.886 522.601 141.886 cv
533.618 141.886 538.455 141.886 537.112 141.797 cv
537.112 145.918 li
494.178 145.918 li
494.178 136.87 li
494.178 134.899 494.805 133.287 496.238 131.942 cv
497.582 130.599 499.193 129.972 501.165 129.882 cv
529.049 129.882 li
529.945 129.882 530.662 129.613 531.289 128.987 cv
531.916 128.36 532.185 127.643 532.275 126.657 cv
532.275 126.12 li
532.275 125.313 532.007 124.597 531.289 123.88 cv
530.752 123.253 530.035 122.984 529.049 122.895 cv
494.983 122.895 li
494.983 118.774 li
530.304 118.774 li
532.185 118.774 533.798 119.401 535.23 120.834 cv
536.574 122.178 537.202 123.791 537.291 125.762 cv
537.291 127.105 li
537.291 128.987 536.664 130.599 535.23 132.033 cv
533.887 133.287 532.275 133.914 530.304 134.003 cv
502.51 134.003 li
501.613 134.003 500.896 134.272 500.18 134.988 cv
499.553 135.526 499.284 136.243 499.193 137.228 cv
499.193 141.797 li
f
%ADOBeginClientInjection: EndPageContent "AI11EPS"
userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse
%ADOEndClientInjection: EndPageContent "AI11EPS"
% page clip
grestore
grestore % PSGState
Adobe_AGM_Core/AGMCORE_save get restore
%%PageTrailer
[/EMC AI11_PDFMark5
[/NamespacePop AI11_PDFMark5
Adobe_AGM_Image/page_trailer get exec
Adobe_CoolType_Core/page_trailer get exec
Adobe_AGM_Core/page_trailer get exec
currentdict Adobe_AGM_Utils eq {end} if
%%Trailer
Adobe_AGM_Image/doc_trailer get exec
Adobe_CoolType_Core/doc_trailer get exec
Adobe_AGM_Core/doc_trailer get exec
%%EOF
%AI9_PrintingDataEnd
userdict /AI9_read_buffer 256 string put
userdict begin
/ai9_skip_data
{
mark
{
currentfile AI9_read_buffer { readline } stopped
{
}
{
not
{
exit
} if
(%AI9_PrivateDataEnd) eq
{
exit
} if
} ifelse
} loop
cleartomark
} def
end
userdict /ai9_skip_data get exec
%AI9_PrivateDataBegin
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: Adobe Illustrator(R) 9.0
%%AI8_CreatorVersion: 11.0.0
%%For: (H) (D)
%%Title: (webworka [Converted].eps)
%%CreationDate: 3/30/04 9:29 PM
%AI9_DataStream
%Gb"-6CQg$SN?J!(r'/,d2O!R+F5?Y8h:S+6F&mKF;O^k$RC0<-[Sh7U\otE[g?R'hmB8`:8^Q9<1[C`sjt+t3/&Ms@3XLB<#Qipc
%?QJ!NGl@Taf7,ioq-UnjI@YT2R!398]2ZZ:eQ;eDjmQNgl\hR..A_j^DBb3GC4K+k3]cf
%m>c[Ap3QHdci+()4PThD(O((Ark(>J4a[/mbp2+pq!"]gQS6(.(V]_7(7tNUmO+sph2D$>rV(70pu8ot(I,[EF5QA7%55J9]+LY5
%58QcF4b*@g`Tq_GAmCYtkC<g'f+dhH$s5>!**Dhcg)>rgPcgO&Fs5Ft_pl"U?C[^bNr#L4bp;Qq':d:V"K!uj%jhLaY
%G49sg)sNf7^\IQ\^%g&LlLW1XYQ+JQTeIUFhtcYtT:RbWC4hDJ3+D@KieM.gmbW"pG-)I+I/hA1FnW:/+lFA(PitP\NV0]$PmYn(
%lO!U!@a"3Xl?7UmkV_7FF2D!S>R%Al77\U0(+]>>6u
%q#.P.IsUW+-f*S`*/S%ias^Wqk/47SB7G3sp79\kJ+q]i?G-:9S,\gYqfSFgD?`i:itDf.EZ3EP-$hr8"]o%il)X;fHr_cB0J_Mc
%"oe5_bO
%Z./<":EGSlc1-U$/f4HZE_-S0^0L1)bCuSI(3=i54o@eK(8'+F]cXu*s03:3$3/%DfI-&8Itp2(s03"+#lhqo.jk$olkBAZGM"/<
%+)>=JER!,\r#bfqIh@Qd_KRanq>FD&qh>&[REGbB3^22:`\CtcZ%W/KPMC4s4h%!:`c&n`lPO=BrkVLb5PuU=iXt6Xo63<+p_QS3
%s)`o3/,Usl&-'[3llD-Orm*/d#l]m]Y^cF4O!7L/j-AM_Dc@XjQ7MptQuW!?lWB&7VKh'kF6g*mgb+%/f<"#O-1hGc@.0=8Z$5t"
%pR8k9ro*lZMWl)Wa#N$jnUE*B]c4[`b1=,@R,^+ZFXmnOXXLScbF)7q(3EmHQnmO/Fc:Hl0B3LGXs9Zhj0iGHI66'+ch$o/__(&>
%ajeOEcFDgO0(d'RgL`N31OQ%*[EU8A;knc/;6q.Hcnbg1:qn:)K\^=PIG$iP/*(ujYAiGN#r
%j`7pm"3uFAUQh:CZk4@[k_C4O;*i\-U(4Id"^bO&G-huFXpblG2d0neoQ5Qrnfa2PeM]QVVnqIIB-VWW#oWDHgD=dq,8iRt.
%Sgi&WO8\4HdITH)V?F8ZT=*2Z0)@EbpW!YJq+U6H$Ce7'qnf2g\VXKE[aoE"fOfLeQ:,Hgl!F'D+81QJ5ck8(PhojILnt5nkarN%
%7d.R>,PE(KhiIY3hEZ"_c_'uXgCEQ`ir\*IjV$S3GhM9?,s&s\IL#lhre0Y>/=]UG\j;kFs2.pjL4%_$9_F3QK_(]'F#ZI6'D7XI
%9RiaiiAaTbEZ)iPDrYI:6P4<3mf5IXM1^cO*bY?2EcT*LQqkXaIY)Qln][DNp[dK'anm(Keif(Ore5f^qeRGP=5/?bd,1SerQLL_
%PZg_Fp+'uUo^%8dLpR=F"FS:H6YiX^,NJ"/T-?QR162&e*VW&@Q3O+MVgUlM;JJPRa]p6Sg5)-7?c8REPtE3r[Vt_>lA5:Ih^b?_
%U>]h9q9:lf8enF8Ri7"orD'JLiuTWG8EDU8c!UrPAt#'Oc?2;qVNd7O4O>!DZHPUJ-fZ1"X9F+.>fFE\36Z=)Vo.4YAO@7-7u$X!
%@=p5R)PM?g):5+7HZtpKi3JBTN]Hb/Lm/8kN/m#sUhY=D4HSfsB\N,h@!b:,O8V+?5p/a,]:C.-i:C:W62qN.b_/-T4"q[&l%8&PMXFnSo=
%jStY0#0mjukDYX"FmM2(F(lVhddi"J[le4Hmj==[e`F;F"h4Hb<('@0aS
%kY+m%O+4.:=_:g&ha15(IeRMk6+M9\cV-d/M:(*=[FVYE-7YPMU0iMVh,lJJtYn),Te,5)NAq/N8D))$,cE9&MScR=(!Zd=7i'1,9FdO,mjWZRll,je(4:%W:2N\%QAV`,C]>fZ\4j*85P0
%In@AuUkLdmr[_JX=2>U^Xqjjb[_KE!+[&86Z:?s"Utan!A_B@db:JSA3M-8Te3*>+7V+`k*-D`Dc*O"rK(::$X]a`mF'X.p@E;YV
%Ig@ujQ)kh>;Q*CNRsEOPXZe5[M&rqJN\u+04D?\3RZ:PeIn=R`&72"#;oIqo_C%at?N(+C\akaUH^2LI*,@<[nY:>DIo/Zgs3bY"
%iu=H5iqUZ5A0jZV%-YDj8D:4;;t#NEPRGc-^SgR+_S[(E+""@[4Op5(d$)0*Q&Rds"f(nYro\R0l:$A!b24N-r)ea
%R#h._lOmq[8n#E0cC&PkiVuTJfFD_K;BJIcl8PkTU#43UVA-u!MDj$^V$Y0maV?HX9Drf+(J!hc;EtKM%;NGX`^Ondf6E>Fi3nFjc3+*YJLoB,J-]=rfC`O4WjDr9:r6sD55Q1BJq,[/-hq.U-HhQ;4?LFDuIF7>Qg\U[$
%-bk()W8)-!s&H1Kj,*Zjn<[4+Huo&Qh5aS]J[E`6;$7Mo5J2:=ap]jfc`_hIEVJTCK>n7DpA4[B
%^HR#Ae$WqqF[*NdrB4QMgCGsp^M!`Jk1*8kI^/eDa(IU[GZBo>#g=>O5JI-nSr#8l%^4./l4WWfh(Qhsiu`IEqBJtPq]13Z_9d!b
%Blj7BrUB9n8Cp'9j2_*l="hVGTHE7cjpKoZc'@A4EYZ/t]E\.L0@tcX,?uV-c>[(YU*dr6#@&=Q0L`Ja>T'\"c#E(/3XjJG3_h'4
%cI7IcM=r)'#U2nQab\>'-H`a,8-',9q"J-(j\p;P@,mgoE]:]j,4k(Ao0Pc=Ej9.k9GPZ,+X?i1o,%*R,[Hj7giI=tV9*gZ)X_fQ0>I$bGKr&hQ#"BB/#
%!4(&;!9adQE]sQAr$>Y2$^:Y-#NC()-QiSSJnL7$LW^aQ/=-d!,033&EL5oFShK9uq/efl&*Nn:L5PO^SKh+ucgEod7hE/me*1s:
%*FL1@[
%!X&g%.hLkbL_Q,s"CrI%HlWbRkfuHE-Qqm\d/"/mT4%qS((2q8_
%]>IiP*BGi<[u5J5hgIS6p"ebSLNc,S`^XpG[=;ra/Ne5:7D;(5V`Lsi9!>-auXCgCa/eSmsj
%[M)]l?*B@(*DCV!l^E-A[5+m=5&d>g[*;S'])7pG4^@riCpFou]sc:-%6\^`I.q8Y_`_?j((jhVLIZJX0E:N!X8p>C.i)*@SjdR0
%SbXhJZ>.L41h>0t8N/!8R+5YDM?hRdRm'O"E2O6@)Y(OU`=&LZeRD@4#@MKUeVd!TSq$tK@"sLjerTR"+eO:%U6[p(T'V$'U9:"X
%>FpDt*n"a&epAQ\RXc9&@*4URk6u/F(d0S>"6n0GS%AYi-8MNF@."VoHid>UJEN]dk5Z.Q<)*N$K+"bBE5CHt6i]FU@?IcH&03Ro
%#ou9uJ1Lf-EhS3/"G-h=#""*S#C,QJ%g!&*g&SDb6mHC-\9aQ.BE'l5:ShEBH5*`OLdqJl$.6OcB9%3V]788Pp=iul)MU'kLW!Js"4pMq;1Q#!sgBIe_8/#99uop(6NZHua#X[VlJ5nk-9\q'>q
%\r4sBN;h6^R&7d"('CU4iomlm4p4P[lP:-@O5H#T.8:?)*+LB"KXomod1miBi
%9k1/]`"ga&?%Ql2K324?%hcUV@fJDem=fi"jnER5;9MM:M58;aBArX0o82cD$YtR+LTgnhRu!=3/.'reK!Kp'6(oIV%jV\r1m04%
%$R?Qc1e]acScj_(#dg/,jlB+@!Gs0"0fbF;n3](!S;?>Qa%(#3)dA.DmZ*fc:HTZN\Ka"m/=bBPZYm8H"7^6jfuU@J=][N+%([!c
%-Do!;,3D1B\;M^Ej+tn:`O):#;1D?sFmQ;?`DY$:TdgRQY)0?:GmXriq?e$X$=J.*+X@T:rK=O.UP5cB/R,_u-+EBJ\FuED]Xl8N
%aofa%]a2!VP$Wh6%7,(i9g$LdnM(_f^sZ*&!CKAV2ZliCWT[`-U;T0e&4K_?J6=#D5/@5o%*fu^"0ddnb"L[M,0A%Q0LbnS=7!##A_SNIm"0o[/r(hUq7*G_C*mVjHmi&AS
%/k:PSXDL2;Hq/X?Hji"PF"Ubj(#g<08,jrP*561UIDF";=;VHh7F2IUpKDb%D7s6,E3Z*8>t'$Ul>*flVQ.Q%l$nU;Q3SYnkr_oo
%cu]48gg<(Vo)+]UqRp>-`@dg<"fM*,e[WK]PJQ@!?uY?ZrF&l:dehVP#-IV@=rVC`O3?gggE>n;Dd8(JF^/4MFq&&\p"*c#D/AsJ
%J)!:f_d7e7"hbW7N8CGNj@\o'*o`R)bM:c3u6mqDFho3Z]aNf01(1]!#E0722T%S^jRX[P)_eQ*#sDdLub](R]@g.?I9G]er1
%dPB2/G.G9I"g4$mXtF^P/9,Z6kX:$l65gBk0T'"-P@h)c2_JaG[[\C#
%%FaT[7S?ZC9GOU--%qNqYqoV)"X`!Naau/=F1.\3$Bbh\@Q%lTM+m%6WD1WHhV68De_J@EYNZ'8ZfIUV(9k"ZY?-"0[G/+crE7ai
%(#Jt3=^H_=]jGi@[?];/6f,Gp*A3k
%?K?mQb\%m]OdGoTIUq
%IfV<;,"FgZ!D>OPeOq-7]=^75eCHEt#,a'%P-lU8WT]e=MCOin88W.kmr75fU7%fJO;7N#)T8`=WS7CjM[2/q2-P/hR>)\LdLfb(Z&4-t^
%!XQc+'.5jQ4Y1iHfP*Zb-4BC4KT32/@h^Y,4U1/fZ@sS4acunF$4<%l!X6QbKg\KTB=oED"=4>s&"UmEG49#VfeEbD>ImkQ-`_So
%EVR.UScA3pr`*UHIu4T*b_T&D>Kq*0-k=FkVp0(LV8U#:g(&:qL/\7T&+&CZQb.DMf=qrQGhl/hECLP`D9]Jr?I]@T;d`u"-#,"<
%[B3A+FbYTje^UXC*C[AFB8`Uu7:ket-l=jcbiYpIV59Z59[%RUhZsb,]3/sC#DcdD/&EgBkp
%B5X99CIZ4Srs+Thc=0`_5=mX`#7ro4mn
%;h\Sk_WI&i^,F2P)q;7Rml#9rZY?\4e@PnY4%.9*+`W8V7*3sE\@>9Qf/)aHg%X2(Z2gn@g%n94b_m!S[agf&9RDX0u5g07S_dFZ;)LH/AiN]JX]#5)L:Mf2#,K.%sg_la8RSR_DMiDHp
%ho%75+(02sL'BGMg@49P9O[K2S7&sQifZ.Jm(SoUD6beM[p&6F>-f3]IlMjCs]d'HFsmY
%5"NWhW#-+fb+]jtk7=pb>]*IYMK_>!E-L@YlkL9".H.kKF_@n@\Ohqb\/0,l4rKHj)Drn&BP!<%2Dir0"Bk0EhNt"UXYsp*Rs(_l[BTp9>bq4.kdR^]>Ag5'$A1)uGPV*#4q\%sUZPGmeo8unf?
%A?O>X%i6s]VMQ174]K1JUmX2>G)8mq37r'(l`[>)8uBHkFIk/ZoCqKu+MMKgelVgumNp)"0;55k=K75dQ147KZX:A^((=_JRauX"
%f@t>j;RnP\*]6C)H"!\Z[S#._FbnR_a`^=#"CpaDgFr:'/MoFeb>IEGR?KObQe3_.)^[S7e;JH*83/4qk.m;.m)hTh]k5CQYa5bu
%SDiET':,3009Y^2PakaDomnl"&ag\b,X4af%Zg8jH`W/G*[;pp7RdlK&X"6BEDtZr)`\pS$BM$ii1otBcdSC,^t`S+%*iQu/l"Kd$(odO!U\REq6hpjT#!;hBF
%NP%6+qJ3Fsd-n3,(2&a5#N\cnHVD*Klg(`Z"4=OU[O\LE`HnA,ja&B-/-ATVrB8Zfj+;nA*_K@%J'#d,]TdjM4n2ZeRB'#)qi`s!
%F941&h.#@p>5Nlf1ll0a\l@7\kl>.HhWH514g1e4Q_IYA[?;9I4IE3oeu*FJS>=I8Z1^H!]F15)=149S2QoL6DqNM,M50%VGoN4I
%k`odf*uM?V5-03k9>A@ra2MmC_GBjiqq.O]\-[UrR*"5SLr=]\a:F("59dB(6QU=#1.fO_qm^G#!Om7Ig1J`D`GJ]P`qmng/VdHa
%idTUOH.nckmF.V[s"uFc!WlT;e`neioCTE&$oR4uE43;,=qITDX0BF()EM#9]O[g;TjGeG=81`?ZudW(l:?30pHheLQUV=^>lcliE7$+Ik$P$/dWa["A2dS%%Pdun0dZ';cElgtiq@$b3,9,H6AG(@!`2Ct9i[KC@7bPCt:
%S3ubgBbSC5RNq!727_t[,Nh;b)6I_b`l\?b<@4c1Xn%qi&*-YqAh@>Y.9enrl'>'>>\>52X"'pHU-,Z`pc-6'>GLs]/Z4*pUQd13
%WdVJ3@=*Pc>VS/0*?HI/cJ.s8,b&B)"ilOOX:DDFkZ8hV4"N@7=0VMrX1n]e
%s4?ZG LhGBNdt6-nY/EX"#+COYt'k+5V^>'fdI!LPgE'%HI8-Ck!5NE3K/`R
%iYb,ig66cAe_7%sfD$'#^0%G%)k8#=bdMNn.I1J'6nldoD=H6=Cteeqab;`&d;]1;S7&eGO&2F47oWEVYlIjd`5rA[:^J[_:o`
%0>;.eb,-k7ib:!;1mN#A6fqdb5;s&i(rh#9ACj<&S`r>a"SPoYrnIYRN]i'KM4
%lK;28mr`a#dK`Xum7pL,e=3Vt2@5kmhK8JD(tR(&$ruEFR@U%JhVBL91.a/kRib%l>aQV!L-o`;m#;R`!Z5GS?u6JpJYgAFfF3V]PdkZ.rpZRbo%[sS%qT+GSO.+k:e%C"DmV.U
%s#@*g9[p)HRI4&\3Y3%PFdo6?V]R>)XjZ;lrG5]%g(e>)P.n7nYR.(#U9QXkch^UekSJrCR=*S\Ub^[scgQZ::Qj4$]\$Fl1IHIV
%G(WB4T>dQG':^5:m;%;0ok6QkO*2ct:Bqo2CJK>S*]FYh+OTO7][t\S`HEcVMN3_oTC+DD^$e0jOTM0A#r6nPVSCC#LdA4ui\K2d
%n&Dc>bV%Q@^-Wf9$:r%;2uj^)ZNu[##;$kc%EsT8,"s*WaJ2'sA%YB3H$n8DPioXR4:YbWGS%n8-J'GS5q(7Hf6!4,Kp[(3giFIR
%$cV$sBMT#a:#q!7h07smKJ>6Bk$jECOJ[de^Tl$)NX;F>@e
%fh<0dFnkN>@Ld4mH5BtW;rdl$)@pYU54m2H[S_g>2a-5cG\up%Za],*9I]_FA:%8-09^H>e>DQ$eK9L_X..@ubB*=)PRf:sh^:[q=Hd[s"/Vg,>iS`]V'C,J!#@.rtdVjdmpciI256.#f>F$^\2$*,gheUb.Y,`P(UHVTNC
%*(1rr_,+,6<=Vtk:^)DM"B?(:9i+9p*m5k-:_2)kV$Bl(g0b_VI"5omM;"Oi>u.6Ho;Do"#^`n6ljou5`?]BrLo&:b:9E\XlNu+K
%\/]I/=H9@u9?\&`U_c%m=r3ZS@!+Q:)Y])$=a%*=lo<)Oo0f'k(J9EHaT9taetJe?7GC\jeqhm!@rWF*RWe+ZU6$%k2j-[$a]cC/
%^.&&C_Gq0iM#ZFr6%A&RU_Jd6oAi_V:gDD9UfSDe&4T,?UAg5_f0Uh9(1R\XW/uZZ%h8Pd:PQCS`dD[d4)P
%)2+oY`<,AHaKN6->#uCk(LfjU)gAb%SQqEjT_3//^'pQfa7Y+(Zp3h%[(eN)Ja6NgKE?MgA!bfD:lrH5?*p#Di]@-C38+LYkn?
%*`XAO$)Wcm)Eqgn*7fu-(Z#.,3F(2HY?;BklLrb5^\C;mMAO*:b_s`6
%bH[1,r"@],GcZ@!Zhe[h&Z.i&6B8K=aA_UqFEsU+F>0T466&\tT@="s>S,BrH(oS/+EQUm&>+VBHbt)L[MgLG5@Gb,qGL%P-ea>>
%<(#au*XfN(/B$gAj^gNdq(5jO%J(k%$bY<02]`C(Gqf`ga:Q=Y+]LZ-j%3'q$.Q,c=E[NK8^hAXE__lsMcA@bY.^9D>W[fk%0F
%9k#lkBWaPb'k'%mNlJ3Q##q\Tr-#V8CbF$U?>XP_/iGJ*4hR54^hrC7>G@bLT)?MqT")iT(O>!a*>_jh%qni>Xt1gn(Z.A*%:c"5
%o+?[@bG+@3%*B(IaYdkL[_;/2F5\Jc"s:;2X^:O^m.o+Xh8cF(cVMZST9;?%jjj1dae#,b(4FkilcSV[@9lVk\s;NY[cZ:IbdU
%Ko1pmNYZq%bkUEVj/9eRT+3Z+3m@B`0]UCZ:PTfPfc8SRI/e1?&Pi7eP<+[p)Lu-BWZ^*KbPIbqfqE1g1=;P;ZSuPrdSqPHR0Q\i
%Q^'D*1s#1E!NNn"ca[=15pjaDX&1!?Sp#)roR,%$da2\ppZOjheo\[+57)_9W>`!X%HG#0RS!-cVVca[C!?Eii@q11[!kOV2,p[U
%[&cP_mLEIc7I9\+NKEO5XKV"mChtd^k&gm:KgFH2fG+U+?[tjr?r7i;%D6D-1[PEV9?<>;0r-@u4]-/Vn0$dWHHt!MT(T(i2A.WK9p-Bb>PpKUEB%)1[nn+3DGgOFpeQX>S_1Qu/A8c-"QnQDJ(-SSC48#Xtdq)cM;U(iADaq+i@0
%5/4tLl4!G`;;kH"\gNu"[5h4*@@]Ec]<'nu=djO`XDH<7alBT?%bat+QCKEZ/@cB^s[6O9>$D,*2RsmM5A`!=S!"-MRdg\qf'eE9L2BCj#t\'
%M(J)TS9K4@XMaBehReiHl9;?\jCc^q]Tm1j)CKRM1OQ?Cj@;6X;r,MN/N3anc(H%8`ePP'3(puJ<#s$"l8#NaK6bFeY0s8VnT&-#
%Z#Ir.>TL[Qhcr0oM^s%qE3o$9(JjOo3J1CgE-2LPfAq\O)QrMel69PLCcsZn=X#pf*T;:l-uf^Q/7dYtJ5&2uS3o,s,fH5/@?@]e4bSF)0l8&q^8<8WD/#t&F]"JmN>"ga.2]Bn4Xrpq.YC-DX1"h8
%P*^9E*&MpXN/3-EUh+1:KPQXAsR8\\1JJ?l[U)C
%[$M$ggM;q\kEX2jdC.Z7hI+BEkS2oOZA*D>aeo%q"^"\'2'"ZDn6$Tb6'U?.%a-jtWYDr'E2a&e*YtHU2@k07G0Npa2Ub"1I&PnM3kX-XW'j@)O>-P[Jb?SdU?5B25%o,KH/Xa%hXI@^"00@jGPpWT$Fc;?AIQJblb5@f
%A*?8.l\$rj6754g4BZqAG\GLg1+V-VdfVi.ne)tmXqi=:$'\0DiYEljOt!m3TBDY^X\WZAL_(IG$5#$Z6L+oNN@5smaNQ"[Xs<0M
%$eJMWF.N9Pau,DiEs4'eh[_'"rbP\&9*3P^dd*l&&HJ^tbC/]&8\dTc0LPSMF6K0>8EV:uFaDj"saONs.)KS,6-BV:\&L!$I\O9O%/s=5[AJ@.47ZjIRh)FYJZem\Lrn;)O
%WghG`NX=N$,IF!V@cKJ,)a/6J/_2%:-"/K/)nsO^HB2/\e)bqNm>8AFCW8*0>IPLaqPeQD^aK]5%7FoDd2Xqk7YOKV=-D:0hPr
%6&`O!(Y<@2qH-1/8keDUJiYcbF-M''/Y7#Z=WfPe1Nk2r>9#">mXo3@R[[V@pL#f,f>u46S6M7`'312*51Hn]s5Wj&5'$C1fZ6+B
%5B?e%gAr3NF,l7kliCDL"\QZfRS!4([W[82p4?>W6,WB*VN%gWITOVY$e:fA_42jV2qp\=EDBf,dp2X(>&mJt5sVJN+8'o3;F-6]
%BNL;nIZuWb&eU-_Z-/F-kU4H[0nH"8%"`%!eS9([#*3AS6I0P'MLO&R+(O^5f,nA6J+4&]_qhZ^s7;REInOpII:I(Oo8i]md+Gh7
%a^#EH]e:;QUcTPs)95sanbuA?Q:Td\H-=,nLI!a[2>QPFW1*\R>lefprJ.G.s-EB.-JP/(JYR*'Od7dZY?Ojo)8rSNaF`M?99i&k
%PQNL6e<'j"-"k"%Y"(7L6uX.ZaD9fA6JR^4`dRnu,nTGgE5uu_!l@(hdWo7WJ(e^gg2)90]6GNR-W515Kagp^jO'?*UM$FVCk%A3
%dNZ_$\)Fdgh0iH;!5A?TS(HQ1IJNa76u$?&gn8uAiA-Z[YXkS"`\pCMjie;%5fYhV;9cP[[C+2t$;;P?"gtI3K5'X@
%a#fghps]MogsRWm=IM8Cc_pKA)H'2,o("f*We#R8(66sh7J^.?Kn#@.Qu;S\fkThiCY0V>=*NpY51s6nOa5d
%.K[uGqG:s7fA]C2FJiVQ>?i,[Cp-%&:\:DI+*;2.55*h$0LIG=LK``Lk#Qfd_IMKY7Vq`hI>27K(&%0:.
%i\h(GoM.oC7]#EqUWp)2QZ@ka-2gdrL*W]g,meu7!U)arW"n`(>Y0P8FF\.bCP.u@e`Km:d1&K.gMJ&0mWY%l(?e,fEF!W98T`6^J@M:(I8OP4Z\j?h%'T"]UFXG%bZ;GWnBdjM);G_YP5Vp]2#9oY^hUNMMna4Rem5$7^]W&CK06q(5CW_K@r
%a,^)ffrI%RI^jauV\_&Nk(\2E4oG2Qn]%J6d9igSgI,'+VhmJgJ*hJjIj[Eo7#pj%:E`:!$^!('N\;g`440BJNfJ]BNptJOttJUp+f*(r2nbb46#rOCHT-#QeW(`sd@`-Ftq7DUZiIJ,t`W
%'[V5k7gGeN5sM&UbPU4+,SRpZ62>,O.IEf$#s!E`$d9:8Di>kD"W7-pTbZd;[CRsZHuRL^!i:a5bi'lp5HSfJTP[Z@12+D<@l\`o
%KQ-CX''_X,a:Yh5%%Ij^-7#@q=rJ[/#Re[V>J2sKX>"?%N'Z&b]sk\T0^6**2cGZaI;_r[0Z>Zo;.,]mn([Uc8;@bF3l,i[I;c'W
%_Lt`j!mVA:lJ@\-KeY=!+'=;beZC!,Kdji"?k5e"X*ZX4.SQ]Re,a@Q\@OUT;F*'LFa.I]lg7*9d&)8%*j_>t?TMd81\*psBF=_Q
%A6a]#U[8@s+TWnn0N@0WEe?#5-3-"V.[a9::B>ftHZ_NTmpS@5NVo(L_\:$F2IL\g05l9QECK]5
%_E=dQ+I44UN0N,_hT`jA<$3Uu81H!)rJXWlGn21aKbZ$FFFdD!2Fdul!%%%'5(_XTpmDJYDS1UJ!EhFYBm$%Vpet-K'?K(T\a4EW
%"&BNBA\M(<_+-#9GAmKYHFJD(Si8".>7d(L?mIdg1>n@<8?LsR_a-R^%f]
%ZCX>SRmWi%>V#6L.^jXH,DENC1eW].B4Qu6bO>t+Ph.TWRNRZ7/Mqme*ihRIo-:[n8[%%^-7)1qOpC23N.M_)#Lec\PngcYe%(-7
%^S[@L7hmu)$.QX
%LMEk#&nu?fQ-/AB#pRWV#>JE,#Obg!Z\#3pQLIm!$@0EgE4DnZHO@2JNCbg)(DF.XfHr8Pg?u[ukISVd,A\*(sah'>d["?/*nU
%TrTs"Y=cPTbIeIaPc=pFpklRnAP:g0p,)HF#ie]R2hl'Gm:`o0BPIl>q$IF)H_$Ic&?d1QRrI[]\>oTk:i#
%fgr\8b(`t4!4+YZ=@*XEJ2]k:W#$?7[&sI$DW)D\9m_D.UcP>&']I@-5gVl\[Q1-M^6)9fQSCm3-BE?;>d6_bAQ(H3m)0W/3`oo&
%<'J/!Ql9XVJ@j2PiQqr[r^;`;nD_Z!`#J;uE!Dm$Hk.d_0uN%,BG@kk3m$[1phOc'5&/hdGpG,+-loBOP"q?T;o-\X]jkItG8$p?
%9J'2aU`^h`RC_HKQjN1lf'iG-okCsJeZ%E!E^^Uk+8#c&WdS`6IC4I+c'5,AWuiu*=RlOa<6tpoJZ@j(D$#]b7uC>W53iY^7;-tj
%J5W!h=s8`IOqSldOj]ifcMb#h?PSf!mgEP8PJF+o/*bDooR21UMRpgRSpM?r/7ldsiSID"m^j2j(#4^#q@cke>")d.pBdj7[!9:4P!IU8,uChZS8
%%&VlNSbcC_[XW>s"R6Du,>Z#gHGe93,LEur;!;"+;4m/1potGKh?`4WH)EMW:83Ean!ou.;W51PW@_h,f0a[+bIEdT0cZ[)@
%ipDBTeCqnM(js7+k_#)$G;9oVC\@T(iC29-CL)4bFS.]HW;M)11p0[i/u*@H?JU4qFm>8D"1YY9$:K:Q6b!I!W,:J51B5#FrB9Ij
%Pu$!\*8>H"lm&X@b4Q(oNU'BB[^Jr_2ou]HHZ&-7]MCS$,Fl*&c*7r,9?B;!_*%!=UC,CG7I/G0jeYY2<[;<&OgS%:Q64'*S_/AH
%7mq&5EW(u,lj=\6.P-17LZDK(,7C0jNAU9K_H!&[MnUol>b,RHcuX7_Fm-NO7ho]g@G')4ecFEIdC`!;KbLG'a^nZQ\W0+.'Fg*\
%AUX0:\'JBor#T.al:9^OSU&3MBc^c$&!Z@iPni3Imcn+l?%q9A)HH5Q_qXYR-7ID#2HV@D
%U"]jRQN4\3bZ$6BX:@tg,I/"]92`oTV]1,rqWi9nesj7g9F12/LuEV8`%b$pp")&!IM?X,lXNKNG;$\fIJa$2bF``Xh;"[qS7iEm
%IMu)Ro.1oT%c,iVTA\JY>&NSFGi)\>bO;Zsf:g6!arJaf-Ubt`f9,UNm[T!G3P>=[mRODB(Vb7ckFLCYPka>ome4PRTkiREWX)I/
%k5n&0ELkHo\/F,IR-0;L[ln71\6CjGR%@JKkc*1`JDVtaAq?bN'I[Ofn#E/W!c&.lN&@7D!Vfp44%+PaG#9*#?q88q1>R5&8O9Vot_KbX*nQVk-#Zt2P!>'+b.'*DPE0GAn$k7YX=L9@/*Z*ajCDHoqijZmlk.olM\nFJ=_"NBkX_4Er\K56VW`[i3;bsF'
%D=)^RdOKc5jbl:(6>OJ$\XliQ&B7C*[2l@NR.e'O>(qNdAM06MTb+H@ZD:TIGqS^<;f%+Q%!,4K!"5L1'u>K2m_%il2EC2=8$Qd>
%_:[lb`?OK*4i,-)*_m`h7aun-\>32>.fa4hnLs)`_%Jkq"heMEkd!tlHC\t>0D8%b9gXs__5>.G.ilUG9;0sd8[6n`2s-]@END=2^ecT?^_O\X
%Ti_;A["`c=$c'mG\YiQ.FWS5';Cmi$EN,jeUA@&d$/kL4e%VJ4KZrH;(AdVKt-WcU'*,>$W*9!_>"F0I302G_JT%*_,"I)rjr=TFVWl[i_)-pqmB(Gn5F2HNDTJB/:U`u1=7n+MT`
%>bfs\6U*>iCbuO;j-+G-6aP,n(s]Xa=dU=&"WbkMOXKmTAeCQ%#/E'RprYVk1^h)1h6a!24L0gNUY.c8@;:u1T5TqURUuq(_)O#\
%(2tI&cHpBA05NHQ5[W]"UY.Dcc)DpjJ@UnB:U4*%8p*e4JEVh8RitpZ.h#rpODKK2)`1baYV9-o1^e_OSoeqFfbr;Lka++6D$!El
%oe]lBG!YG-[\-un-oH`kiJhAUl=dU+c8&7JU"PTqjGM2QDP7^X:kGJ3O@l\Fnp.@T!gNWV3blWBpPapsG"hd-ubdo*?j5[?M^(mlT%Pl_.)+Ht[.OV;+P5rM]-Ir5=%_5WP!,Ju[AlV`1
%=]EmFdb6J%>j\Q'7j%ri7$>%iZMkT"q,bpBa*u3gZ%m$b'lC!p.,)c(Q>@[T'[_U2fQl$kjJBlu#ij)+_kuoa#@6\@7cU;\'aru`
%N6+s1W#9p`lU>%jeI$WlXUI#X/[3$Y'!I_.[E,kGThRs`Z_r!JFXbHP6n?.`AIROE;TJ&cU;R:@LP9C^>,t_-72:MJfFNgC!G8&e
%jJZ!V9Wc*603K*I+7"M#JC$a5`GboXenuG&YR+>;UP0L_P?7ZB>T5BIKc%!*/lEOc$$B]Hb/puj(1PD5K?7Jb_CWi9#pb*jZ"VE[
%9,O7>lktK+KtSgDk>?4^8)iEZCH$YSY0Cp2dFT@!g1;.(d0pg*JbUW5iAAt^6`EH*O[ptUjT6^t?3C0=UnC"9c5%iRd[m.$OAO&G
%HiGc_:H0md)r,kkCJm$mtK>pc1jnQGs<1D4YMXShLc(3JEq?TK/eYBJmJMfEJrb(pd?uS
%=#X$7C,1k%V]=p]X8rRo1@M<;0nZiR"lK#]LSdK^.NajHY(0_&YHRE&^oD#-aXT.@9#.Yr(E9nt)grmA2%:8f$&mR)I\sED\V!-O
%0Prf@\eK[9NWP0LFfo;R8;`WBC1bGO"inCa=rYO(.N;7]OS4SRTHdBM7&EUN0;)VW;hiIj*5Y$:,I1jQGAJq@m8X6Ag"^$36IUf9
%6e".mlO#6P/!!64#$URF?GE.i&XW<0>=KE!/dmU&dEDNRX:,Z-H"*Pl-a(t/Ce!`Vj)1fdWr]m:Qtk;6PJ"bgWu/5qBZ2bP-d>E0
%![!eD-0%kn-cR#PFY$eq`0#aYG%PeRAtpS85"0$[
%L#D'LoO1CM^dlf9=QSmAI<(4`+3+!`N_%66lF[dkW9gZ&/aa
%+I+\5p:@NMpl%LT`@t8-0YhWse5dCq'CV5aHW=FuW/cjT8RN!=^u*Q[=Cf==5qjJ/,PMhf"\h4Y+IFDaMEk9:B%j`F$1Y@c#E`)$
%(kiPWQN_D;r>(q_&a2=a3\9`;:&?Td$OWRQFPuI/c-tO9P-$BkoNh)u@aeNd9HgU::."D.jY\@4.M#PYe6&8ZSE*j(#adWlA^M>0XiTTK
%3O!VbQ]uPg*"0_jIAI*pKt,fbs01_A59%@4*epbX(O5a*;H=gIj8>2#@n(FD9JCJWo9Q,4[&AOtb[qP*I2ZR+Z`F
%BZGG/uFXV%537DISSui/]?r"-?*#_8U=rC\d9r[OgZF,(b&68N#>W9<7Rt9r?!CQ.:@8+1c
%S]08P'n16gSTAr)OliAGC7/V^6hBDgI5gM;WRJS[VCZP+[F7%tViaC9=kj8#&EuXsL(,#(fP*n]][@C5PjS3k1A`gFs3
%m=`(&NaXV1`:cl?9.cTFh1/Poh@P4[-^ks\XcY1r0]^50M=`VZUF*)Zh9AKi^blHp;p5t2o((@p=2PfZgqppQ6J%>D;Q$1g1mc2F
%O\)EQS9`eHiE;9h^WZm33u3i5+Y`.R#_XWG8P5_tauF1gJ64ThBJa$MNG9mTHtsBb2QWZ99>%_;g>Z'Wk](^mahAq7oGZ#A\Z;)RVNG`6i%,E$C4!cTWaG]JnBK$2$8o!/coEQX;#
%rd[p@9VI1=>e'-Rp32qS,g3_"Z#AY8"8sBbe/XAp&?0Cg"CN!X%NnKq0,5"X[mP*R*CQZ]"m01JYu,slD>JS3I[kV?q\tpNo5a,h
%H$a!%F!IOu,%+fJQSL8;3i")L$ocLK27:D"%XK=Zin=<[f*bm>eT%thC8CXMoKqee?/3%+`@hBYk%
%rL(au]n8=UL1SrL2L9NS-I8DNVg*;aDfsnsRQ1d+i-ohA<_&&[3^5:A8GchI5"rTg1%60N6R&"AA9UAgf-m='X/I^,4DeVPi$a&;
%GC:e$L#bOf\D+1`DYW8]eT_%)s7ZEUjn&4"hn4F3p+O$b!U(>,UJW(^I_#>/kUul2:V0sR%f>G85J6jKS+k75ln?S"!t"(r)FDE_sjMA6?&l7^c>R\PkJ$Y59RE#duAcM_Y27?k,M*-k3oI::C^
%mX!2<40r)aQg:CN7o3k9b$WHV1q(2Ueji^Bct(,(cabMA+@YH+QG)TF^"&*2X^A528,$)-jbb!cUX1'NR)Bns.jObM
%rL-c9@1)9iQa?=_X7:*io-,f7fX`CBift?;Ba]r;*&EcRh*'fOO3hL@?`oaia7X9nrDepN:j?8g]A:ukAX@;DM=Yn;7c&%RU.&L%
%]*khul.,uXmrNL%eq/I'>-K6LgMIY[r_46H)Wtu:i9g[#/FMr"[k0YpXS,;LQZWT14P-7^j?Gq'5uS"Y`o-Q3VE>`R0SM@X+5FEr
%:,]0,UK>7uq:A\eQ'$p>_Z+V?JGRFu3hB@)`u[&->=bAPK2(9RpD`FIZ[[3gVLhm=#;\'1>I@RgBr5%
%V.\E$#0re["E)12R)P<m$kmX>6]m"l
%U]k?%\Haksp&1+UO7Nc:`gK-\[4kD^7-sR+O/o)@,IQU2mra^B1(&R`'0#^P$ucNE2?[pF.&YWNUXBXk?W.h
%M%H#n#/i-mq`X=RBD'EF(#IQTh]F\ZJQA+#d(urU\/PTuhJ*W_jiDuuj4@Tqcm^6:_N]_N34locaE]gKSg?:d,HCYm5Y5M59nHV[
%B$>?c"9b&,^hsGEHmA.J!fWPtU2l#)`^/:Gq_?#qVpn6fORX5M2FXf4PO8@.k',[!0YkaDV\M%mdZLLD(?ErC/P,4gP%@^%;<->5
%Lk-%rLDKd+Y1'n'3fE;qAXci4e+7EoHM<-Gq&b]no6Q["L5FE"Woc_*\cAtQ[A#GWR8O>^qrk-BLhgK,-<_10`0?.0Kg1k3);BT%kN.XJ^>$7@=m/:j;-1;-f'r4IRk[KWe#*`6C#fbLV"]e\6cTWN^aF8+E9W[\X^tuC&?E?5&j@UErNK]G=:0k'%
%8NmDpnu.Z_"_4C^"VFl=Z^fI6_[MVCTSaV@;DLtLEgCs7R0+K*olG'faKKgS=4EQGkZfQZdZtmUUPiUJV-La\"T_Am8d*AG&k=-R
%&O'r[_#'"B8Qp)[JB$quB2/]:++\/_G&J.J85iD-@JYojH##!4d]sDHKS:?:G;i#.([/iXn5=B`J;cqaG!L<]^QuQMe&h@Ho=^
%7hlqJ=UD[7(a,-U8/L8Iec?GQ"LJ=Am)6R=C?>B,W"\Gs(E+,;Nf+Mm=+Io*@p5*k\eU.2WqVGUVD,Id'HCkdL?Yk/"q?D/nuOuf
%d*s%udDa/NM[::_5HlNq\&mn[`#>n-YQ?pn_Z_^.El!]ZTPQ9Wml"!Ob/&@TG0jWT867mf,iK7PQrN=acHb
%r(7eCZ"!ir3p"K/XAR]J.+tAU^n*2]>L]?M=8dh6p8QW>W7If+ZS+oDSX-D`(NJ!`T@rX[%9h7f;fh_ibPu2>^$\a'9<.AhA5=K#
%r,U.!17@aeo&*#Dq+ajWqqM*gAR)Mm:NEiZ'8>'3k_-aJq*\rdPJPc4/#+[8:GVu@#Z4,`@`iq%u>RV.$`I$Aaj
%3RBH7NKMi`'?eRo&.j%eE*Nr;8NDNQoSM/d+Wm8JPqLM`_d^:Y,#%9Xd%*
%MUVG@doF4P-Z)@lbZ!2HFsM$";,(-`cMEh)p*CK3Mpe,PK-8On-LFt3:Y_pWa-qL$;>At,4Ue[`gcJI(Z#p'c+sEIM$]@nCPg
%cP0=N]E+;EJpWmU4];b\26_7hfQI1Ycr(H71Y4B='j(H02<>:Nj)ChH^2i4boj"k4EVRGb*cZs%K06c6,6c@aA)l,5L5B6eXGs8t
%2NuL0EuLgP)akN/lSYi/2N$0-2JJ+*k!k`gId(I(i7,9u)&Gm0-nfSL8Cp\8Y,10CAWjtIkFthXR=4mu`l[V7d!fN,RK5uOBfGo8
%Q!=?6HnEksE,:>"]3oe(ZF/$^jk.TG?p83E].K;[G/"ruG&Ia#f9!Fti2r-O12'ko]L`I^aC^XS2MlFCE&WW$F#n,Gqs)7=NT#2r
%O./8mXtg1DY!PdUnCkM)^b31ZkOQmqBm^R5Wmfs-"AGOsq$^2Xf4%"]mm#CM_5_Se[.//q^-5G0HN
%g79:oC73F)HBNqQ\YdR6^g=[\*M510B)*]ik)KmD,aF!`Z&F^],tYBIMN.S'I%eLs/%]Q]7,MIWl(OPK'O>rpHcMAqQnH?tX[TT3
%!t6.i`t^FMe7=9oc5l[k^i[NIO,hG@]m0&a'fF)NE+0hX>+;hI)C9K969bk7T+[gV5_;C@=beFOASY`^-*2VR#[0M3H'+IN\IJ]>
%m'I.85fYX["'Nf!jrEQ7;^^9(SnYE/7_-8Om)+kSq(`\i&(%#,m'W9+-l!)5B!.E3WSI$YJ`Md<-
%/%D4]KtWJ3^tCiRd(/S%@^L[J,tj((fMSaSWiZWNgO>0ue8$a.-#"FRf]UFC:a2F/YmC-p>ddRI)/Z4ZAle]0qaKoigE
%I\@W!3hY(]N>=W63f7Oo0Vo\Yk=3Rj(ol6jS'$TgmYlq"bYqIFMuh$X$;Hn#&ggVTJp7HeZAuE#qH=oG]O_HtNMn[n`DdKAZ<%Lf
%@DIIF[T]L3Y>#BY,N(O;F?`f#VO::u5bW_g[cWDcF4Cqu7"[5Eh,?qN`u'(HW(4:*%!S&90eP28Ti5:&,8d2HnBpnG1I-l'%]gL'
%Pr=RuJh<=8N+#Z(25t!m4!de$@E\^'`c,SBZY*.SfFfa!&`4lBeM_2W_cWIkg'jlB7,%Z"g]0.P\_qeJJ^V=0()[pC)JO*3U7dkF
%[#K,ET]L1ugc-LTB,]q:n&2l6*!P!b=T`P(\O]oTNdG7K\_4/G4eQBq9_YE#)oX-g3acH=[-p64Z/M$@@?Q0#?KMORH]+eV)Z2h3\*.G?c^_8(1j$`(GU5(EGX02kT"7?WVUNb40`j4Voa%rVY(dFdu_YEeh-MHC]Pn7l1?TuN$;7q
%fesY82M\Fb;$FBo@[hXD+md"E;kdX@XBN#HTBHP\1_jlV]g5kd4MLELZs^!GD#:6CV#8afdZSQ-m@)fWq!8hJlH:A'',6N*RN%
%dmRSBE2se+X4;e*[`8#;knaDDEE"YX^q,K)fKsNqVg]A6^rTh0D%(_5NRq#Wd%ukT.2"AfKp5C8!](ea)U2eTOho'aI3D_PpMJU)
%JXr*A/^R==&!km6[0gp'Gsa0>/hc?hVW6_QlX9ogk*n8M&ZBsfbq-p'VD>_OfrCf(hU)Gk'L?[UkMCYQ08j"7&'ghi#34,]d=[-'
%@]^>(Abi6@J`4""=SOZ15br2Wi&TG:IPto1^Fbc$db;Wp"WC7%l&5qPWtH1@)=qu=f*a8?1r@OiX'ikLe]#(V:hhMm%Tm_/4]R3g
%Pf9s]F6S?;+\JQ!&bpMf<9:nj>1FgCR)+9AF@N+9i2XrH]0[!udUNNdW^elV3GE5,Ukl0#:%g"c%b75%u(4N)=K8U"1bVE2"N;tj!/,2&0I0_N<7[!a]*WiE):
%2u7(U[P[@i:Kg&_l\j3bJB,g#d@FLSf]O2=Mf+i8;*DNG[$Ct1qct2.`2r.Ub'sEW5;ol=3Ps/7$L@dGYEG6c34eb;0&E[nGudQGf!EcSB?o$O)tBk5T#VK
%;[k.L'>UC,`0s:HN9Z7[^A7!_8JV#"Qe@ahJeM:GRdS1SMPC;h9!-VO>-n(1!+J/k(M^tBUh:VicjTRVlo!,8_qZZH7_+I?#r!7;
%<+PQt_VQ/t<%9t4jO]#/$D(,=@3;l4a.$p0<1g$ch6;=^ik_]>WF8%D>GIcjK0Z&lYRL3#!+=`tA]PK@JU[DKb;L]Hb`%1qhVEFbN#iPKfs7p':WZ`HK\7p#1"32!3G@5KUQEl'3,cIeLGb(qN4eMf".:irDN'6JjT-[)G^6bh,m$q):l!+TtR-."9T=:a!3"lE$Z"j?&WKfuJ\r.rZE>>J.`s]ZpkA9];U99>Zj2&7ee6JcZP2N^'Lp,#bMs\TEFT
%d5puQ,%Cga::4X:"bJ2:K,#(+9\"tm:.`=_bU!.Q&JRVd]Hc&3"]JIg"U1JAU;B$`Ts"":gbaq(enoP7@mF@Y-SFl&cM+ZBdkH"6rjegTGUrDfkZ0@cXmdL^D.G-*Y9)b-R^\?NNf`9-t&QFUf]pF
%kGV:X$&UiH-*@O]"HFJ9@0HgD5duHJTV)]beZD1A"T^XHU_ORLQK&=@TKo.e':PT0F;\Bp)_lpG<,5Lo%+gnWF`"+0!c\d>+^76`
%?qDe^"9i3lV-ZuW?:Af\-kIqILJ:UlnYE/gWh:1`GZGKq`&\/1_is4X:bZU_(+=b9aUls(?/;QSaCP5=V%XPGSM7.k*ZU@&`41]5DekIG!/i4rQE$lEXR&=IW?phhF`k.XS
%+nFjaG)`,E)RT.qicNk@^lH@VpKn)&--Kn#0P-h%(9`(F<6_HI(p-dNls/#e@dpM`2(1(:la$Y823OsgVO#J3='o_F8di"X"o)s=
%ef:FHAY(,lqh>E=lYW1HAM"[4XXhm`ho=<>,k7GT%6MbLN3=#T:tK9-XD=q7O#t8WoHAP`A<"/)Q^Y2[<9%MieGuEL>/:8f[fVc@
%^409K9[ksoJ?3Io:7/=&$X2j72:&`d-E#@%qVA(tH;pp2_(n[iN1:3a%;9Y9pNH$.H$>C\54gR$G>?lN^T
%MsZ0H>KiLh[FQ(-So8+4:cW#TXKa=TZ3SQ,Tg[DlB0/\.:3m%q*IOdl*_U3E2JZ&9>H7qY_;>7M/\mXUmE=c/YRND;`HK+_D;@(W
%Y#+_;)e37734dpF5/Zhr&oVni;\Yb#rnEm*?lQ2nhl^^APlIb3Jb\)8gnn]4&b'WJmbWkY\g;4='sQkk\')d0KA.n@cJ+V!ciY\;
%c"@o,[MR,A=3Z)dZO/Y(C>p'6g8leF39s-S@oZ$=L=^5uUH0i%hLaq=J231si>%Q&C9+tJb_md/cI>!L"6?*g"lCc=Srt!<`@M4Y
%<^/Fsmmdbc;emZ[eM?Ggonh2(:?*l;1RcF\!V,fGp3_LmSt8@30"crsC9-F:1'O[h2[8*r1M%jU%QVf^20XAEB'bh_#d_p:7uJg#
%cR)$/VS%Km$FKntMF#)L0!AjJ:bFp,R:*9`ggDA*,Z9`u\E2M9rnRY*[PtE/PP!L_OFJ_;-_[fUU^Y*RnTI%?@%uFTYjar$j_-$=B'6esqlI)!+R\g]Gb6.Si7M4j\2YOWm92
%'5(D)>/_-mF.;IjaHN'8'WCn:@9*UI/PG4n-i%J>*p?MOk6rBU]UIa.?JWC*PT:ifSWXC(%>N_&Rc2A=@m)%Gc/mg8;="P(%W)Go
%HGC/2HYW*snd1C!YT6Pk>/A.45ajN"R#3KHKI=;W>&$=OK#4nO\$i5J'kU^un?*0<854,(%?t/OYs'7fT"6lX\pA;1Q4Kqs45J.5
%l8E:=,h7R:$ET_ZPFcJlb5r2F8Q+oR'Xb/uHA$/`/%F]"0qE.p_4WK%n?7j<"4ng3PjPKHIY&=urYkCI(LadnhDbO-UXj9k;V;3)pHQr*
%AfjHm>*G5_RRouaRNb7#a]Lo>AaS5KM/6.)9d[1M9n==9QMnArY)WZm1-YZ,YT?2(,9"3&ooiP6_Y<:S='/2QZuEGCbLFAWlR9uQ%+i.gD^^i$W^rZZ%Wgt9gQT4f?<.g&(3
%2)B5IWN0ETrcV<%isZ(Q"js4%m0j+Lh/5"[G`sT.1hRc_.f&&Nfl-K3.B[tj!9nDra&S\Q.`:77j_F^h*%IY.P#\fYB$@UHGROtQ
%,H!SNhCA>A18F<("1'&LBU93/&@cVG_*S6N("M7t:T5mqM-G+e$8hFRJF?OsWdZt?J5Y4YFc3B%!;^SA(,Qtc?,FkO#c3[U!dq_N
%NjW]k(6ObQ0R!oMg4J*3:?=aee1G0!j%hN]D!"ZBZipe32/baeb@j,jiu?a9)hEkJp#Ir@?+5o^*k6+8*uf>^M9AJVOK9TkEk5?q
%9&<0G`\p\T]/2tcQP]*,TG!U!NRW#$-*8k(;)khcqJ!7S-0Z`_JrOoMQBfD.AB/]DJJ+J35]oV^cmW*VFI"1T#$@P`=U$kWBm;C:
%H;N'm;bRnN?CJKj3*m7fgTo*CdaG&rBT6mEJSi[=piZhl,NTIrC[gF6#!-#H)'bh9L`omUHAZ;=2DZ*XO!UrZF3S$,^p?amg,r:*
%@*HVLBk:ZIer$#Urn6U.Tk1W9kX`7X_WjZ2?uJpDp1g.L)Qg/S!pnIK24/KWRTF@k<2!$*c,I0WiPQ#N>/n9[J>5\CB/Jmj0^6oP
%bL%Hu$J7uJ[9Be2o_hcYInNZ6U<,RRoSM9tlg"nk>:9d-`F^(Eks=XH+/]O8[od2idtWQ`.RO[#Bg&=fgYbk)L.nF!WG>IE9+*T-
%kU?"hl<&`@>.2k1Pm("tg0)lj0X&>1..Nh5CooNQj2M-Li6!^?AHsL#HB\anTL-F4(+Da4)O=ZtChh1bK#qb,:DF!LGW)_I::qM0
%KSojh1"65(?r;a8<24bA[,Ln1>_t`R]c5e%XKS*P9t6MO`+]BpO[tRFfbF*j.c*6pP@U1#e7)Hbk#:^?$T-'r/Qalm%]W,oBeI+o
%]eSubW_`q$[AbuO\LCXW-Go#30a[r(bHbW;5H5WnJT],nXF@6OE@fX7_Pij@3,0:Q["45%.Vm("aedYD(^s5\kY5rp=ed(\^>#X?
%P`RrhV+PX&5uZ[cS8F.4#;h([At=Hj(Z;aWTFg9`Yb2@;1Q$>f;d(_C>OWbT8NNQR2!TU6'kO&%,p]U7Z>n32Ao+r8.s5-,Q@(".
%o6ooXd-t?":sZTgC/]n.W0S?s%Q.ptpTP?<6]AUoQs6R[*'L^VFo%gOi(hm4T<[WeE)hHi]m)V!6$aA0(ZE#GB\&"W<_cU)0
%Q=c-dAKXe6ZJ9.Y%G\Mj/_#D+X8TP(e:*i:\&f&XcJ9*SX^)c(2>e2naWoJRj=HFS3_[cViMbm(Z#r-7eJFP$[H$!H&,mdGf1Tcj
%mBbBmaZS"/?
%5O6`*0^`%gjh`EiHn+l@nT6G/1l>5?So1q>VScGT1C+dl&TIuE-!4r>RVa`:OG2OuMqgPq+?h)j=?VTeJY`)VJhAR`?%#qL>!jbo
%DcU+Rs-Rj,hY,mPg1q=/>PXO/4u!)tR-2NOU=WndYN:b71t*B)=B.(0RT.m)19UaXN2$U6<*/Zn_k]dA3K"pmC7HUu(7o.[F7L,j
%AY%?R?:.s0j;(%dW3
%\oOBWhV&^=T3j`si+mG?FhZ(\4@S5c[-N^M1R^Pk-1tcg;mA`ZU&hHJH(5q03IT_(C/sbil2B5@2^(p1lRlLX9%S%<(gW?G2Bc?L
%\g;32'(?WFhjbOQ;s;AGgR=S#PB_]gY>X_MY1N;qm.&t/Mq,%ZWA4F9E[:V.bbTL=GT:UmiY[TFq(V%u0#ASQK)n)+T_$BNZ7p%3[#[/kZa1,'38rp-!";WYI5%?%VlIPBp5+cgZ!%B[Uj')rQ\\Ih
%.7m8J7D60nQnk3+$VZhrg+U(ij##i@"fA8099"j)U&UUgrBH11Yjd+4:H$+V,R!iYGWAbc+\udqD\Q)B4Z9Pk-D20>RQMc9LCn-?
%(>S.6`eeOaa2(%)Lb=.6%WUPCf#7Y$9e)['%:bQj?--k1<.q\T7EqUVWW+GNJ9G(HVuCRX7WjJ7&hYY$eL:.T2!E:P;Vl`0 0OL,'_VE
%M,'7@4\IZLT=ceW^VX*^FK8aLm:T%K)P+B5Xii]<\SfR!]fS5IQ@UdmBYTafgAtq%>6[.=3Gp=;3.e2L^gmL7>$G]%"Kaq8"[MEi
%f7/@N7q:[8N)gR2.Yls@GqD=;2,&=r4Ip&bMP_B0Mt8Ph%@Bs61KSY3b^:1SKs@O78B?XYUKbiR)R!.1=.NF[lf4pJ4Jo(Y-U=35
%5#HJUF\JsO8%'`N4D`-jGXZ;%RbXc-I],i,bs3G6SUeqG)P@uH%[p*hWO*sP0b"uERCoZ,\=jJ1K%_`KoWJ4[q>jO3(NH/`hJb`M
%8p[:"^?#V&VH?Gb<)Ob0>6[O?Uqj;IJ8IpEPVbXDgk?YKRDnOp9HamPWXoNU9L#gKL6A;[$RD?3DAWdP,T23(9hu`NQ%_%1(hQM+
%C0;tEKf:P6$cTbq;i(DDeZ'^Q'SQT.k'G+mf@-*t?ND#l$atS7_RtT\Mrn/nVT=ll!0[MA3l0g^7`Jo@\R`_/b`g,E+<^2/5d=?s
%%cE2Ml:+i6?@>One79jP[Ad/,WTkpT>O5!Po<\j>;JW3qSP]&X:L,X]J<-.]h5CZ$Y\=e8lM`8.n'GC\$\Zm>f)Z0;5HusW2#mV;
%+=SsOn0h7iJZAH%%;DY4*]`AJJdequKAK8d"*=Ml_)3WRCB2%6PW[nsR#5EJ1]om19PK;73h=ScSkmStJ6>5U?*KbBkS7cr1,+$%
%XphP"`9\PAb^Ga4\d$Goq>*,8\alVsPk?<`Y"s,i%&sBha,>5.Q7O"Yq>\k9DS)3Na`Z5PS:@IR!@6TKd:b@3VUncgkY1/\DB#Ml%WW5.MBY=Z@/Dh9:f!+9X^L&TC
%/RU>W&W]ATE>isb`4cum4da#r^>3sY,b>ZnpGKD.B);%eY>k,Q[LK3eQOe66]e^kC+r7asK?P]?DshJI1hS&j.X:,_Z+^GG^c'4@
%nWl92hP,WJO1EbkKf7QufUB]$>tq`%m9\!m:;H:O1a)Z/q$[4sro[=B_DkaN9S(PDU]9sU)1[Vjmb>TmM>?[!u],9+&i@d7r
%E:8)D'[N8i)T)Q06k7dl(;186T7#.i(d?e>11C^agbS4W's&d&.rOMTg&CW7R,P3u?-kE]O+)&gT`+fH[)T?8"V$NG48r(aKZ?(<
%+ed-'cnWn(!L6J_UcN@13cI^g\r"=uZ5UtB5PTTF^Yj([4p@Z*_;mJP`4Rg#.PFlj1p17-5e41CY]7ABX@AVCk+3I%t64AHQ-5:WgYi]h<$,3])DQj^:TGla:Xr_9:,D:gN[;]NWU*a?7uKar5Dl#V\X8EFnVq!2!dlY3>RCG
%*Pp42A9tKF=8Ml@2QHC>GO6K,J8TB.[ZnE(+J.]lU?4`jSHck$!GjfGig4el!I\[GEdeu*dc\BbbNWrWMBYCTg%_O@oc;cJ`SnQN
%A-e=WDW3OC:e-h([IR)i!3h#lGQ]3bF62+p)spIYs4@U#X(TGJ"[bQQI$,YFc;Li7jPacHhn;q/Xu[Ts./IqKrt?$NjIUe2r9F.C
%RO[sWc[Z;^I6Vn#c)ZMH;tgnjk-kf?S],/,5qPS^3T-7+e..WC*J,XC]dT5o*X5kbeUuf@NqcXi0#n-Zs"LKO>3N[i@Z\:Wm-E5:s2KrNse`S:1Qc4/K>W56^s+?*BroD@"9]
%!,(0&%3[\Ilgu%.XqUD%gR3="H2g*XH]Wf\TFB1RCr0[+^,i"_(6KJbo>FfT
%W9J[jQF\6Sp_dq"ni:^@%MAeTCZcqA39p,S"J[_-P<[t@j
%qh(m^;E>7qW=GR,0RC82q[Q?C,
%J]>V)%%!H]fDR7"D/'c,u7K;k1d2l_imu:KQOZLY%4J&cZ_d\#8`D.pXm`WM@PC$Dj5IoPA#tn`U_C@ELT^4M[<+Q'[UfGF'
%k-$P@Gf%W$Ma]5$:h_ptg!R!Gf37]IVa1hZ&\ICO1B%_3;R1C'rY&;rVQEYNgKHnKOF#Q/j>3o;sRN9M5t/t4:FFQoHFCr*I@!p_p)Lo[\7UC
%A:3H)hQ1,UAXHcDI>.#Q=)1IE1G%P%BRjoEklJY4A*G3
%BmtqPjF1NFh2`o^3J:_[3XhtCIQ(QR2lVUU-VUlp:%]"*]W_M9n[0ZZKQ]5n"8Mei$NneX!q3e:ktaAjfBPW;aa_JIiQ:2$4[poeT"N'`%?Er?JJ0&mDc3fLoY=#Z_8T@:qVDi`)
%W0rPD/RN91/1At8b6%qm\N)T4r%.S+I-ruT+i!0qpkPkLm(5!q'I&\oH:*LoEU(//7aNJ!a%$ZS9F
%TG>:k3s5R$/Z5SL4)Jud[Cn4g5dHZ#SUth/jF4h)%m-/Oh$nOKCifXX\^Ij%9(2%5)UmX*"M)/n2Ma_8B=#0ISD10)O/2U6,*$>d
%BaKgUks(_dnb;ps3ip%+&SYAoi@!bKQoL`Cq6lchP_*:-9,2eR8&3J!\bBteu"
%;Vl19ljEJBU;*6)qKHr?8^u"5;YSV(SSj=)XTR4]VAdO2
%j5GWSqr34[*G$<0`PrERUW]2bs#H6m>CX)O.Q&pq8i0uPA[U&?Y2.#:C@Pc#F*s_#f?i"+]P.!=K-\]kNJu8.4^0*M5V:[Lc.K3o
%b7WVQLVm-C;*qb`aq6Y'qm@d/Fe(I543r8!Zs<#$a&3tB1ubjmOcQKQ+a@9Gs7WHSl&gToU1qCAqb";98TiaT-"WuMh`jX_*DD_N
%6kP\!D's0=a(+fE$b3.kg_X%RX,%:,7;Q-e_P0VR+TN0>Ia=d[4l)jb&oBDR$tBSdZG7+t/%;k"&/"?P1(K!HV5c6hWfg47TkjZC
%ApiV.(`_06N8O?JHRf+4p]U'5TQ8%DgpA/r8[ckp`4Qp,KY2@-TIAm3BgV#1RGVgbjm&g^4ih.aJ
%4%Sr$(*N>9UTtekQU\cX)=`=R$#2,3c-2nIV'W:r:89+dG]@r>.n=j(jfG%SU!TF)%]eSaNj(MnhYjLm
%"c:obnVuA-mfs^;KuF'WZ#:_#I=Bgg)El(\6rqFBM&("RN^VMn*0>@3Cs*`^+Sr1`fPC@[Rf@ac+g9R^\Z_YH^3ukW:CabTiWM"E
%lARm'C:s-`OeFp6@T^cK@nL@30BWS7aD_geJ4>?.3EnlTFbsFjCcUTeh/m`-\9iK[**r!F+VGep^h@SPi&Ha\g%UGuSR=(QE*H&ck!K!Co$De_
%X.(eLGs_0eiMj[J'8Edu[pjp9R@"/1\5uJc6]24*5b6`nKjL_`6Vnr(LW+[C61e[=ZW+.;keQe(YrWCh7u&6b:F&^1\cU!H&OgiF
%?3$MZ$CK1H*$&/d2J5U7%)>sTh1*'A52%gM-+IQ#L6Zp;?.WfP8Ss$&gPR\hgmjD$EI\T?4mk,-O:$+557r&eh%>+Wa\GZTlgbP>
%.M\5DZk:B#CF!]m/UgJuZU=iqZ!b!J2$@G)'3j/`%*T'OI(E9RLr5ufHiu`)\J""]<\bqRMaO.[GNQ/^gr@:#m^=>^f*lB!#qj'T
%^7it:H>$5FXMR:2P:9NHWUk(uj\nLBM#;5g%!:r<0]X5K8M^0=%fqJ;9q(e5-W-UCV1sc@LlA2@2h?B+m*FW;Y]3t>mF"]/,-O]X
%^d1&q,%<9l>Fn?X'W^>9\EmsY\*/ZIrd_6&%stVYdnSa,#E&D%V@0.7Gu8Ppi(^%"V6ml\SWk`s=9K_<+&/?61=Qn->WF06$!dt?
%ZQE&opsHCX'Te=V1J/6\WAk5M*aU?K*0F23ntQ+"KK
%(#DU'k^o/r>6Ns"#oP1dNj8Rd):qIp3g"X;Gf^nE3]BtB8NpCI!3sVs?>b--NtkLPdB8c[LpBG0;'65-V7ZTl6kuA1?LQ4l?jO^,
%d(S6ADq+q1osdogB3HJG8>@=07=`rncXRlW@\H$nfqo^XJVjMXp\k*-hbS.-:dDS-_mj'u(;\=*+\jtCWrnJc>a\K7q.B&aKsY&f
%it[hG(EG"oR!IA+J:\G(k`Wi4=K9S\,`uS-aC3&G1]na_IB:>lJe[hhP,"0:93QoZM0b8mj$AW^<2b**5kL05E][ptcB"HR$*#i/lf55qB6>]EidofjQ5MMZmp"2ulh=(#.[@^f#[)`uf*dhk/'aSE(]gOrJLDB$EGk?Tdft\cjfsjo
%P6?#S5$BX3>Ja%t<+M.7[WP2V$2&U+U[1r68L&++9_(a`ZXKP^XB@Uo=gJU2aI6\E.;P5PQ/`MK06[l;I;?[FK=)f_!q6>%;cm/2
%T%d]Ep1:2InpI(9L[1m?mc0b[c-?FNCK2OtY9?j,o8h<7WKa\oW
%8ifrBTo*RG@n75ST3rNRb\G15EA0?Y1OsI\A%IIgn[S1r1*nEH/7M)FPgtemPd3#$.]$rj7\u@:cDZt"bc$aRPu0!`>.`rsk0*8TV=\b0uh3_.m9i61-VCAN,=#k3$s`,M"Yd
%"+4sDr"dT"T"sZ6-Ce%eF>F"C_t0
%VBF<-3NT0fm6*QkPk#EjmIb%.]lS7>PC`#PDKR$0hYMJS5Z$B6661Zj&X35q$p>D:S>UsI&`RD8)NrVl%[IReaJUlt;#)i((!5/>l60gePWq85'm0^j'Kdoc/pgZMmRFUF9%=_>*/:]LAeC$ug7C!=P]bo;%.'S952]ca^
%\tn5pLBYa+TL;]ngHok:5TRGNqbA-uGhB/bP:n5agt:WJ-&P=<.192DEnp$QI/EbZS=Jb-7tG`<.3T(2QJ(#]oM&o"ZrFI^0U-nO
%2Sp>CK0,iY,0\#%G1j65kk":,:"Q'nH2+\.F/*j?F20PmhkBB.;k]D-a[46qE[Fjk!JG,XKCG3Cm6?-U&ROmUMXcbaLLP3pULLh:gb1>AKI
%-c]LSOi).q5t*MoCko8)\H#:G)+M6ZG.8J?Pdk-P'%qFstk/m81oem=9)RAnSOS"s?QDa`[Z0T6duF
%A7DkCP4b-XfR8sYQ?hFX-;N&q-`=(`>>JS4*FE"0&=g+6PY<=ik>QSL'#P>`W9MYWSYecL%%oXl[aGd;
%$?C1.bctG.ctX2Em=BsTdsSI1W&>31Q@7to=,Y9DP$;W<0Hd48A(UVMq#&O1R6?:N9Yp2\S;pOR7%O9r`WK.DcLfo=ZjBaP\ba2P
%HCP?3/gf$lT$h(Q/]=slp+3kqjD!AH:8SOb6A`7S]sC1iiTgoH-Hgr_tYXVY.bb^:fH;fp6hL8e[K`=k`b9!O@=`ulLbXtPLo1>d==Z['5ZOWYlR!#L*
%*WjS9FJgnoe?[43.P6"l'$sq=jZ9M9*q!u/?de^hfoMJI#-`g!MdR;@Eu6IH'12biL*7A0bK]V*?]bBe@61"F0V5o@:IWRnIOl@=
%=D$HoV35'1ZlCWq/S&jU%mHm();K\N^"U=RPD8lk(A8),WRN$@k%^^BI;:Gq`PCq5YOI(6"&JI@4Z
%MO/nYPsr?n7D)*:[Tn-11@kNNciVE?1*8bV4?[:?'Ib.\+"FO+4qr%^I&Q,II)*e$W+>#m7XP!ZXI0TdQm+:1o>)]J\_-W:OdV?k
%R@+Rf_+qg#>OEtWEuqAkP6Oj(WJu?m/07E;=cIjX&OA:_BAIp?1e_oUrPRls[,+=C#dcB^U7R5U>&cI>L4$A[d&pN0mhl*I/4Bo)8<8
%@\"Rlj*gS$>l2]Km":Rpma$'I<4q[BroNbs3.`St@@=96HMLJC@T4L*QkY!t;ZKtX"Hh1UM/!r,dV*Ouq!CA%m`EP-4sL*qCML90
%=7Y<`.3L7`3cL#UC!6lOqCTZOC^q>::`.94)KLO_+E3lSF_(kl<&./P!Y6W3JRflZn7!IJ">TJ+(/4ugpNZQ+>SLX-64^(58EhrK
%8/X[(+D%e!5g$/tR8o=?bd^!G^WR8rXLQsl"$nKrod7u>4Vk>@4)B4\h+P2,0U]Vs:&a`4[out4&N%+QC>s4BO3]3GE#Iqt#ZYje
%c3[/Y9"1^>%E,p/FMh*fjWR3uJ4c(HH,ra3[6[Xp980Ii=_(\:#)6`"@![^9_4Mcm/(jV"JfUtkYtW>*'CN%]m;Pa9.#8sdYc*hQ4D86?6);9rKY3rSZp@XBP7_j>A,
%C_8Y@VES*Q+X[YK*SjGDKnUYA`q)G:P;'UsgRg$-0R!E26;fkFMjT*$@3I)i,n!<'nA.FhO=Vq.7F#p/*lL$+KpjP<7GbmJ;ETE4
%O;+N!$cuQ5e]@R<99aIEBc4d%\X0984RR/<''6j*`fZ3'Fd's7+MQ/"g!YO\0e7C7WmTku/b.#)W6i#nbNr.`X0YSBma73??=>"V
%(d;%m.ZoF=Uq0]280O;TIo'3):j^:#8!X*`UjZX6^2Mb"nTXB6_?mIZj[uVorBgX#[P2=>;f^*=CYGusP:/$k&JRW[&W#Ej(8A9!)Tj6@s
%M)Qs!g5fmi&P2,^b8#R9p%.>qkAV:g,#\-4*n%2s+CK?c2`3gb/JIr7%(%1&`F7r1,RuT1bbcWq,2EDOM*Hi0Hp=SRM&VR<91\(9
%-/**l,];[1p*jW52HF!:65$bqqV,*tnTJc3@2K9t=OWJ:Jj>.#L%Yq+M@bba;/MXbL^(+Q2%Cfu=(4IOIZfO!%3eO9M%FNrnfk[\
%+W=kq\L0^#7SBPK7#2&0O'kD4DV'L7hWtOP+hGQUm)K!]U'U>/T`mdT4f[B[*nHJ[d3/!lR$[tG+$l/ZdSc0p3nYp_H!Q]C2(?]96IaRL3QW8%tGW@Kp-%\5f@]18LU8!Z;E@P,`Gs&`oWVVc_1q?o-D_u;fe.+?o-Mu]
%AkTU8UM(uGZ3NuO>V^cVTRd*k/j-8OM!fd@p0cdrLpdb7@&1_Q]m!V'Z=64G+J4#'A&X6VjG,osaJk69kN&pMd7:VqnGT@TZif[S
%Hnf=XVX*G!-B5\h\?AM8!3*]@(O]g9;CYTefb$ikC8SCgImiEil6@EXj$cmp&47WneC6u\Vl>`A!E=Ima'/+tS5m_b3WCRkmtYXC
%Q'V/?`sgZH',V.E#"N36Nob6Gb\(=Udrn%mgHkl0(%9LS/AKPUp"I+QO-6(OSgo4U-j
%oaqc4]06::HdtVO4C7]C9$H+@;HGbnYPLd15g`*E?rJ-rZO2,VbeKZsaC6`qWMkk7e@M;55l(c;R?d+'mCSdD?l;ia!AX%"ooVit
%qFDc2N+g;gbX/DZ%>8ht9-bToL:X0<,TKs/\Def$6a:KstR2P<>>aX7*R;5g4JA_99U&$JJN4&hnL5=5MO_W^Z=]A-KR%NhV[5rD?RQC]Y!Z#KmAX.m(\\MT^-FQ<-*O
%JSjaJ7iA5\1ZjX0 G,cok4R4W#&&TrLl,`46Gk>kH8Q^8a`1:kX5LJ!G;.:a[LG49m$]:nkpJ`
%I/e/i*S091=I\@9i7[%YQIcF_dLXWPXQ+\BG<^]b8]N9S,uFG.TR?X_:X;7IEgpCg0oDb,Ml';#J7PW#%"@*>GV%guiQRj!mqn%4
%BlX1<>2JRrb-[,E0e9nt?un.5;jaWlKccrC$_;Ai%ViAMRO"]^pAl`-,o0&E_MjdH17uE>I)7JZ*jV:?MsqnLfS:!a)?E]EY,k]9W:[*AR6[&R_"QSW8.J66=cWAYddG+,SH)pMjJC3V
%f:hs652s4!'<&!r&qS#/OiZf'c%Z-uilGI3D3]kBZ?mq@oCM]")_,&k#0N)UcRHP&>2R#]K\*\BM^W%h-o,h#GrUU&q[T4+Gm9:k
%M,JR",f@eQJX@G)lc5*!59F%T,?l3Di6p^&l*9pQh-b*&k>6/:Xu9cR^n1,n%[o-1Y5I-EM]Ar:%Yb;@jf")bP8d/9jG);aGOY:\
%\d't)S?sL[[]&o9Gc^aegoW.mYG!"DGksFmj(64mfS2sJW$V$YE:o6D_BNb.TdjMQKpWYB#9["sJL.rKcIhDF4k^:'=5(B\A2/V\
%(\56DF,t@$IajHYF"Iu(l),X^J\5it+sIt!1S3S6ajtt\a7P_8(/[Maji7^4`"3#W:H%)D=bb]X7lD813**u(;UJ#PI@
%0>DjN69jb6RHV]RQ:EL'o&[+VH.N/^1!3O$d/akF4/4-%dut]<5$#Cs28+.nT?-ZYRZ^n[8_I\Q\,hM.4PI46;a%dq`H:AiNHD58
%p?.'gF=Z81o(3`-'bc\H2&q%.&1ROEB;X\0%T]Hc@Y]\Pe7/>,<+e,8U#/M39A/K.6=^6j8-$$Y>*^'W5]/oj+SE@u0aT"kbQjsg
%`t:UG@W\R;15DU?"'clRZSDP&:4`do,ftNUi*G"G\^%6?qn"b_niXVq23["`3DPeQCu[OL/'@mTk!'sXWS2Af"aT[0[.6JB0aOW9
%N9Z0CFGWq:QB_]LGMj)`gQU:4pQJ2TCa6Oaf(>h<22@E!]/c(3!Osn=`5VNM;W(2h"F84*=-1WtN)?YirJRnhDiQo,*NG]H=Ti&t
%in9H7r,*glGc?";e6shJ92T?IU(`rC#$bo#Pn0TP2X3Pg.'!Sr0TuCE"We.h3l70@
%K;p'H'uf!Q`sr/jknk?P-u1;-)4Sd:!HgUAmH?J51uXd=!o#fq=W!9bGtjQR6ucG1C6hajihjLD?@sV&2s*]njf4lk2(Sj.=1/Mq
%YBQC7n:<@p_D+l!9hp4P\Kc9-5+*^36I'P:"N*Rn\)&qk-IpeW!
%5BQs>ns#A]YnS@c@4qt0__Y9+>=HSB>c4a3Ri.6B&O@l6jbiWBdCPEM5;iSqeD7H_K[T6emDg>:/qmR-8j47XcA?V=Y3GKrlBeYM
%2E(q)aF@MGb%Fi!hlV-6esk*!hlU?BKleF%=_^=gRK3VFJO@jDp[BFmZqWgR$tVUpgY;l2[jW((U+TTF8^B%qp=R+Mq-NDRAY@l8
%s3E-RQV$B%DT'<^(0uJp7>1h[#Hd4_AH6`UU"iO'7$`pm*N;DD6YOeGgY
%?uKer1?kcTK#m4M%$YC?Q)LR)ibSg9J#X?(g=8hfa7d-'H"g:tn`PO\L^h7b
%=Rb!jh.X\]@#`3"jX,OhE2ZkUA3^AcS&8AgLs+U^L55+_6U$O"nXX2T*X#$5m=oE]dio14%Usqt,'XuPiBND">DU$Wr2Pf(XWOuT
%i0\ufb"oX5%O,cnD->:J:,bJY$:+iMlH3*\,]FS@&B"dMW7"1G=!+P`B=#*GHdMCEmuE`
%).ELt>R*ZP6n/&u5of^dTWQY(>paJ@T"[(<^3!V;&G"
%4BnD>/Wa6>8sXUhlK;598W!%!<;6H-7eOMLiN-_4E%(D,CPt%=ns'HBG`buMYd/H(GY/Jh?;Xa\ElO<1?V[%"6g6@:SGN%*&(R@O
%EiQGP$*-gi#908V;s<,TCRaM5<69"Y+EftUV*GaFSA*W)0nQ?n9$&h[os#.W]PWEr1lBpjU#8GrXp:`d9CO!iI1fpYoV&aaG]5RG?ct,#r*d8'&RPiZknB!sNX\4U/U:V9l@H-CLW
%@0G.s0<`X/&[g%<0QWX:\C%6c+:$f+\g.AZ5\k7CA@C;t&F-$8:
%;*6Da9t_p9ps+$P*MuC/GB$kj&Gk)pL22$;jV^SDaL9A!BfKMq6O&q=ndcT^ZKnf!%E]u$_%L4W*o.f;B
%SF(M]1gQcWV"r=Ia%(B]K[%e#*I18ABrhf2f6u@LSq6(joWU.W>3J0JfQ"c"I;oPL$8J7f]AlUfn4ch)7c7YpoW"NI'N@>+.8dT4
%*2bB&e(D,ZW$Ic>Kq1+i7<*j!N;G6=5i6;F$p3D5)EB3^N36m
%ATbK/q?8+t'.2-V,U]ij\r[0R_Sb+tYAggFK?4_@*0'^63lo]PhWa",(Lp'3dW<^GKp7S9=\Ooi4"R,C:)UhBjc7s0MaN:tRb?"7
%)6el+GC/YRbaX5lfaAalE$+ZTqXj\CNK*?2\,[uR!nW+J+Tf/_Ac]+P@Mk3nqXn[8&(OCZ'\ge=0;eG-
%3KZU+G$gd0-1S7HKtR?%4F0H+$&^7P!0HH%l3BA9*:0)>B[-qtf^&H,Z_-DQ7E`!4kRpkq*m9Vj"!,mX5IP;ISs/g%lK'`U?g`CZ
%?9BhTRRD0AeCL6;&$PDHP8QMp7"5p`?fFu'KBNCfPU9h7G1bT:pAB/V;+)E9k0]EF6U8l6k.Z]'A_Z;)2N%GI7bY-Ag'S#JREH[`-XoZd=h/uW'NeN"*F\SXLlL]kZVWcQ,5m(R$^
%fMiTif"KjJMr,DTQbQ:tZW6GDj;]4/dn'0/ZMge\fMt>jdZAYboj[W-#D@(dV:4I$gRZ?<;I('Qp
%979tLSs.%A#bq$43?Zpt/$_)EQ2*1KR0O,))j<*56XbQRa]GhTml\rgOh:iSbjrp
%?dTO9c0Nbt>1HG!@e]CoV)O..!UY)Q'i]inp`pB$i96!aqtQDZ%@KYn0*@OgXe%uF.D;Cap`1"
%a+H;E)2[T/O*\)3&?j^dot_N8?1gK%F`,Y*kGn`=Whk7i0`GUPjEOSiP=ZF]uW'T$Yaffc@rL'"$,
%XD(=Z'\(a]<0ms8i_fE"6KI!D]2>oV\KrH->`_6c7@&1LX']kC.'CXqB\;Q&(W!50Q,hTcY(^"]_TaicTup*[a$;C3"."\AQD:UV
%NqV^7%M.Pt"k^s:5]`^n.PZfc*AY.>er,eYrVKXbcg3d=c/mib>2gT'do@rF=`Q;q)>Yd1qm@p[$L&=DHCn4B9'._3H8uXBDN$cK
%,
+ej1q,-`?o,HlVol?o6[V5-g/XQ/HOG1niWH=Fl-X3^]U)A^'$3)6[*Y\%#"ps4Lr8mQ4sJg4Nt&R[2s$rR
%it.=`4uN_c+7+N]51333/[o`I2=MmN"Zp@U5\-V@Hp5YQ<-Msc[&hP88J&]8js-BSMNo;(D9/^'pnF7=h;WO]I=+hKS/:`]OTm6l
%'VTNV$1[modd9]P`2s_*19P3he^h>D@;(f/;0]kJ$F5sX\.q4
%=#$g_%]+H`L'nra>2^5Dd&GsPMP6Ra#sE"rF+d`a223!UWRusZAa$+ScU5@?7\<%:iB49's*[9Y8c:1PNn*-"-0d2+)n_qI!3@Mm
%prp1L=DjSg%K5(gSC8b`,`_YBdW?>QA`TE0,]CW"fbu2_+&s$+M:&fJ!-,oX(&nrO1[?[#J5t:q3Z8hsCPV;+OF:,c 8YCpT*C%utQ/%.>6AD+"VZYQ`)TKgE'QLsa&8TQ/csI&m\raXX)H;8pt,%nlF&[a:%U4l"812&hJ6G-GXl>YF#P,Ie%C&rWnq.hj*r9mfqJP>HG[c
%`+cIK/:(R3dL6i;_SK&+Et;'Ahd#q@L0Udq'N\?jOj\9K^.[j6$<-*WH$FXq4d_sro&CohGnNhGrbg6un+/D*]N?=h;o09KUn(^B
%R/Qt#A\k#r&melr-4>pc?AQg!>5Zfkb\'Rm&7f\^5g/VuD0rWlg[Y!NQ'"np)&7*mhP)Vk;[>Zl1^JGp2DQ'cclgs+rgp%?8F@Bo
%G?91umH5lae;f=))RYTG9^36+>LjCbT1A0`]X^(\=2*#[pD*UuU(>+@h:Dm9"scO=BfHid%V&%R"5C8;@:V^P('XM=5I2n"M>#[=
%VDBQnI(+t`KZ3MV>uk[XDX=/+Sc.o6[p.h^iTsEY4i9"UCgXfq%:r]G3/Zu@E/A0NDgh4']>>sh
%%VP)E.;>d/,![anfZ<2?,`m;W\L2C8YEQE#@4%gJp8af=Z_$1Ckg7I90[Xa\ORP5]`7(U][3!RMs2V2b#*5fqJj^"Fac1c7^,:'%G@=WlMq>!?HAsF;U
%o4*SYp/n[W0W5TqQfAcbO`*KP:ehg8);!`;X&?eiaoZ0W7Tnp\b:%^8__TC6AQVFTkmYa['&.^o'H*364,pJ'14U:/;9#&5).ch\
%EDYe)9j2gNZK5M8"b.OOX"0U9L.:+@[]*pLEnR`+'/>_YiRpaPD)'>n`=b
%Y"Y#C_7^t7AV.uSCcS3W8l"u_-%?PS0AP,L\c^'l.fdZr>m3`C&Q>]!oHV'5KfGU=]EmY@M[XLhG#Ndu+q28;%kgSb
%KuXG;YWYeq`-<\)0"5Pgm#%E9.i^XG((5gLE,bR=M"lV>H#p3Zg9teC;)a4VI+2,:&_TkM%$SO/Ntr^(k$=+EN68n%!g#:"+(a`IO:fMDk0H^iae2\JG'p?RWi[D=DPPb/dumT+
%+;.,>7e'^)^3/]*H5(jSdkd$!&kaL"'c'CmIjOPd!-q2aaCp#2N(>-MRbsnX=!0;f+7d^&F@AKM%+M2<@e8cP5Z=DR/[?u/h[t(u4UP(6([SZ?
%4j]k8?%BbXrfE!V3;`MgKY?e,>gSAA"MQlD"N*PFkKD@,ddNX./['\0kC\@Q-Rs"9*ZqG4Ek\1^FURTeIVLqc`7XnkH]]&R8cB7AcDAd6Q&!#DPogQ\Ycl4btFEH=G7aj0XNQAr_nn+#[)6\*\6M2PhO)2'cKg.+29t[\&LF105q3bjXXNB
%Zr]"jaB4'$.8%a?m)S\FJmGNHYmq_&HM.a45Zf!PX^iIH=>$e]qH1L*WOBo0`hiFEYRX?<.6'7h#HGbGJ1W/7!0Ie@3>@aGkGM5P
%dPRsHMKRt[*ipRk>?FD@Wn`K!J%\(F=7n%3+D-248b5R2R]hP?qSHVOA6j<\Rg0:h:MCgVdjV:"3EG;f;6mA^?'bIDiVi/uB?10d
%SEEa!HZDI"Mq0D5uO=nHmQ'T]64&U4UZ?N8Q
%QX)6+P6^XF32@$j]*rO>5@4!Y3lnN+eEOVNK2Z-:bJG$7UXC>`DI9eXPae,-NcLo4,Z:do0qK(#OY)cbPV/0i4?fB2WXLbqg%iMV
%cK)Hd>As7@Go,mocUtgqJm9BQYCLkTPQ.!QE,DL&=GSJ0SF.G+d3H\KbSJJS0RqF-N-;i+ES
%m#(pJ3()tL&'g9J?JudbP)D*5dK0+9'g=kiHh[dsBm;Hu+(Q&6->
%N>NdR+Y\7SRe'r"[g>$'EXL#kmY9G.$HuU$Q)>";i-%jqC.We\/2U!IBODC@4*D5Tpdkm-i(=Jm?nVVi
%Esi6_N"L/%F=Y_Rh<`;aW4H-.e%C;nJB*)_
%_3V^(ZV$3;k?i@Iq!1'u^9m6uX8PlHbr6hSUf?aUXV=m%)#t8`a+I+\qS?KBZ.:p!BNG$liMM8SRdhlAi1RkDn1b@8ZAp`L$A[#lP^ncu,-_o#f'hKFrrE+J-Tn-(\Y6Cpa
%Tn0KJH^aR0%?-I0$D%]?@,&J&E&>N$7*.r)a8ug0)K;2/mo=&Z6@S,6Kq,`n9r+F^FGp$thD/bo'n`qn0]GO1!9,tJ"&cV\UK"?`
%Yl0[Z[HJBQ/U)^.k`;[@S[udhA3O;_(9!Tl<8/*7+2ec+:7?9_dUh\ZjmuK]-j*3"U.f:69KFj$u_t""a7E=,+k[D$r-1j
%;$7FtFZadS@s2e%"fg17II,:Gn6I&1h#^%.qR+$%(+A:rfD3oJ9OdK&atohCY,e@bjU$^=`V-<95ao4>FUO;W=5PY.r>@:CPHf?rl+@+kO[U1:Oi0*5Ps3Ms*t$Os6[#hmdL/2hu:HKJ+i@1_r(CN62m'to7oR.e^&a>fAG;SrjI7PrGR1H8q>gmDk$^o
%0E0/nQ[a/XiW$V`s7on!p:l"P5Q9!rgL&jf^\IDIfI)7f>^X'UrTBBMBH]24q"t#-?7P1UA0JoVHMm^.%lU$Zof!sgN6>rHih6dg
%f]qMq,^DhhZ>Fm#,S3+5%7JbN!mu!>X?Io1V-18/b8+,ALjhNQ*5pEX)h8a6WRKS6cG<;>Q&W;Q\1B[T]*cY`!6-*"R/hOk2_BBS
%7-MH]of/*f#,%(f8'iLQd$\[hg-\nXDs(^P!!qhJca%"e,W\+=;NoG(V0qMd5KLW=`8(N6/N0RW*6aea5'T)dV:AF*cQKuEo'*gi
%XDLDg4?T`176WaupJ&>?,/JiGShD`KKpK*^TMA@MdIuQm9[6e(-Gh[#-n%d!KAN`*Z@AN5M-"1-'67,
%XNl/m0sT;]pbDn'FMHgS1e6j,8b*]jQ/3B9B4\g4_I8FjQT)NUk6"+*a7.q95DMXYW.8[9)a?o#%_m$rTeI0.]`R&>gEqc1:URdF
%V[??s7+HoWUH@$JG8k=/S9N'*B6DcS.rZgdS:K,>o#ET]R=J^U0qD^t:#7QT_+;X`1(M@WF-^
%dd!FP;?.KF2\$\g66>?Kg:CV%(W>I/(Fok%K'4(LX1Ms?6QJ.:mHR%(ZB)9i??`W.01ShtIN,lBk?`?2kT]c]gKRkt>^"7kL
%__i="e(@Z=oqg9DfnoWa]Ar"Of57L(qdNZ_WGpjuXF,_3"]RL%etWO8Z?p,a1XVb1%G]Bg9H)LX(Mb<5L<.q*\!uRl,MKHCanlAC
%!S4R[M?_AI]i,5KT:ZoBAY?D6:>(LH:7)R,U68"C#$n-o(KSk;fj*c0P!",l++o!L00o:267*I?.mtcQ_3HNnD4a0nF2Uj'%OuJcak:c8HR(ek>nC7`">Bjp%@/n^LtZ1.\:p>p]E9O%D%?djQ"a\Z!.[p;ibjhH^+6K?gEY!
%D9k:'p\F4"c[RoLds!>>]/`\%mdcOV!26tGAG?qclpMWMJKj&!LB.'E]a1T'L[#@Z6C0Id@/fsIfd&?97o6@?m"YCkUh5@[JkXDl
%SN+d.\U$5XLHs-["4FYd;B$LG:?-Vt?EHjHR9#Q_"A_+Id!8edo"dVZ3$e(SCM7t]+AH"Qm5J9q9-b3Kog]I=6piX\r^ek>D2U;&
%hknYl"`4utD5\<@-l%]geue\$GnLL1$:>^fFpMam),4fN[pIYrKrIF4[?t=i(R7F5^66`LDnTWQ7\VLTLjh?#1!.ss$1aDJ\4(CQ
%`_IKH:YS<[?\`X-1WtKEDS&0BXi&\[.maut.Cm>'NSZA`'kHprV+TW$AVd8Y'UKr!%#A^jTK`q,kL1Gj"Qb3Tglbcl+c8PsWK1Me*"iS-q7*0XAZ
%ml`^&Ao.)=,WX&3feHl=#E%BDGa=l"jrA''?T06ZdmXEtpMlr.'U40F\(rPjfB[C>:;q^nS8a$Am*W+"+Mj[dA
%pdF&B*'+h7U,@!D2o4EeKI?`^8\):_?LP*bZ@LPTY;X!-Du?6c#X(8kU*K"71%9:/:^;Y=G!E9d.5%[DS07o8+
%XGA9X4X9BH$ll?@%VC,[-T;^K3Zt5Qc1f]n9":-jg"(9(!P]tcQGp;n\"T5GUp^2d'/o^QrfT=M+YXtrL_/)Q.9!^[\K8ghV4#?f1^arma""k%$W'*a7/Z/iFI)D16;l\2j6eDEp5]T?pJSCXG0^tbL45/h,Qf`Q[jj)09Lt?]j9uJ&*Q\ho-dUVF]hHHKq!Il-`a1M#Cu[*QDR;TAR6!X1"arT-t!4!?Oe`!kT-2T
%E8'.B%MWopL\Na%L9ccgl9GQ(1fr!Z]SN&?$ULQn?eBYh?lt$Do]VUH#NA/\_S]*%:8I;qMg/h=gSLh)''DI/DZnIJI:)8k(Af>0
%WgVu*N`%,ABU_`pb.P@R]V1sse@"(Hl:`J[B:eJ%_)Rj.Je?1-n!\8;H6fi5jb@.tPGN
%/a@20_/)/h$PB>ud8WZa,X6Fe2\")VA"`BQ"8iIHE9JGVpS#JN>mM/L_?'i\R/QG]r3-mffqM!h,gQ"sV2P
%aD\C;B5%W,n$;L%(;F(jY4@85bpAC>R+K>7(afZ:\&k,W%O/3HAQ;".G*VgVC"Ad\K%'WD;?o$U6_8GYn8fjECr"PNQkGkHbD-OL
%5Nj+Aao7K7WoXeF%_q'L,"Tph:'9_9Eg)Hlm8E]I[R@J[Q"BHFNjK38Nn2N/:3#TFFnL(mA,U@H7cPf'^"kE&MeV,%a("W,&k2@3
%+"O?a*C@QKM/\+_D5t'BRk*Pe747XdQUU5V-!d*]7"^nR;OIlqbV3/G9:Qf]8rEc(U4Y@#E^Fuk,
%Ms?m6+k:/49'+cYN0o]V(jk2;JW3BHmGZVa/10iupu[)Y>?\rA'<9$qa4[J>W.L3:4*Uu^cGgWC%(+jPJ._5g/`9I`_3ru-M']f*
%o%'JAihQFrG+oV\Rb+!JUc*gmrmSPe`
%0nVi9#]RI"O1c0#G0o[]@!_UEFJ;GpLT8IIGlK4?A*]!^j9.H4YseogJ%"R6>t