接上例:http://blog.csdn.net/kunshan_shenbin/archive/2008/11/18/3324472.aspx
这里介绍T4版本如何自定义控件。
T3参考实现:http://blog.csdn.net/kunshan_shenbin/archive/2008/11/14/3299950.aspx
如下图所示建立工程:
所需jar包同上例一致。
代码如下:
Box.java
- package com.ttdev.components;
- import org.apache.tapestry.*;
- public class Box extends AbstractComponent {
- protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
- writer.begin("table");
- writer.attribute("border", 1);
- renderInformalParameters(writer, cycle);
- writer.begin("tr");
- writer.begin("td");
- renderBody(writer, cycle);
- writer.end();
- writer.end();
- writer.end();
- }
- }
- package com.ttdev.components;
- import java.util.*;
- import org.apache.tapestry.*;
- import org.apache.tapestry.annotations.*;
- public abstract class Copyright extends BaseComponent {
- @Parameter(name="holder", required=false, defaultValue="literal:Foo Inc.")
- public abstract String getHolder();
- public int getCurrentYear() {
- return new GregorianCalendar().get(GregorianCalendar.YEAR);
- }
- }
Home.java
- package com.ttdev.components;
- import org.apache.tapestry.html.*;
- public abstract class Home extends BasePage {
- public abstract int getColor();
- public void onOk() {
- System.out.println(Integer.toHexString(getColor()));
- }
- }
RGB.java
- package com.ttdev.components;
- import org.apache.tapestry.*;
- import org.apache.tapestry.annotations.*;
- public abstract class RGB extends BaseComponent {
- public abstract int getRed();
- public abstract void setRed(int red);
- public abstract int getGreen();
- public abstract void setGreen(int green);
- public abstract int getBlue();
- public abstract void setBlue(int blue);
- @Parameter(required=true)
- public abstract int getColor();
- public abstract void setColor(int color);
- protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
- if (!cycle.isRewinding()) {
- setRed(getColor() >> 16);
- setGreen((getColor() >> 8) & 0xff);
- setBlue(getColor() & 0xff);
- }
- super.renderComponent(writer, cycle);
- if (cycle.isRewinding()) {
- setColor((getRed() << 16) | (getGreen() << 8) | getBlue());
- }
- }
- public String getBackgroundColorAssignment() {
- return "background-color: rgb(" + getRed() + "," + getGreen() + "," + getBlue() + ")";
- }
- }
Box.jwc
- <?xml version="1.0"?>
- <!DOCTYPE component-specification PUBLIC
- "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
- <component-specification
- allow-body="yes"
- allow-informal-parameters="yes">
- </component-specification>
Components.library
- <?xml version="1.0"?>
- <!DOCTYPE library-specification PUBLIC
- "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
- <library-specification>
- <meta key="org.apache.tapestry.component-class-packages" value="com.ttdev.components"/>
- </library-specification>
Copyright.html
- <html>
- <body jwcid="$content$">
- <hr>
- Copyright <span jwcid="year">2005</span>. <span jwcid="holder">Foo Inc.</span> All rights reserved.
- </body>
- </html>
Copyright.jwc
- <?xml version="1.0"?>
- <!DOCTYPE component-specification PUBLIC
- "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
- <component-specification
- allow-body="no">
- <description>It renders a copyright notice.</description>
- <component id="year" type="Insert">
- <binding name="value" value="currentYear"/>
- </component>
- <component id="holder" type="Insert">
- <binding name="value" value="holder"/>
- </component>
- </component-specification>
RGB.html
- <html>
- <body jwcid="$content$">
- R: <input type="text" size="3" maxlength="3" jwcid="red"/>
- G: <input type="text" size="3" maxlength="3" jwcid="green"/>
- B: <input type="text" size="3" maxlength="3" jwcid="blue"/>
- Sample: <span jwcid="sample" style="background-color: rgb(255, 0, 0)">
- </span>
- </body>
- </html>
RGB.jwc
- <?xml version="1.0"?>
- <!DOCTYPE component-specification PUBLIC
- "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
- <component-specification allow-body="no" allow-informal-parameters="no">
- <component id="red" type="TextField">
- <binding name="value" value="red"/>
- </component>
- <component id="green" type="TextField">
- <binding name="value" value="green"/>
- </component>
- <component id="blue" type="TextField">
- <binding name="value" value="blue"/>
- </component>
- <component id="sample" type="Any">
- <binding name="element" value="literal:span"/>
- <binding name="style" value="ognl:backgroundColorAssignment"/>
- </component>
- </component-specification>
Components.application
- <?xml version="1.0"?>
- <!DOCTYPE application PUBLIC
- "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
- <application name="Components">
- <meta key="org.apache.tapestry.component-class-packages" value="com.ttdev.components"/>
- <component-type
- type="Copyright"
- specification-path="classes/com/ttdev/components/Copyright.jwc"/>
- <component-type
- type="Box"
- specification-path="classes/com/ttdev/components/Box.jwc"/>
- <component-type
- type="RGB"
- specification-path="classes/com/ttdev/components/RGB.jwc"/>
- </application>
Home.html
- <html>
- <head></head>
- <body>
- <h1>Page 1</h1>
- This is page 1.
- <form jwcid="form">
- <span jwcid="rgb">edit color here</span>
- <input type="submit" value="OK"/>
- </form>
- <span jwcid="box" width="50%">
- <span jwcid="copyright">Copyright notice</span>
- </span>
- </body>
- </html>
Home.page
- <?xml version="1.0"?>
- <!DOCTYPE page-specification PUBLIC
- "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
- <page-specification class="com.ttdev.components.Home">
- <component id="copyright" type="Copyright">
- </component>
- <component id="box" type="Box"/>
- <component id="form" type="Form">
- <binding name="listener" value="listener:onOk"/>
- </component>
- <component id="rgb" type="RGB">
- <binding name="color" value="color"/>
- </component>
- </page-specification>
web.xml
- <?xml version="1.0"?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/TR/xmlschema-1/"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
- <display-name>Components</display-name>
- <servlet>
- <servlet-name>Components</servlet-name>
- <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>Components</servlet-name>
- <url-pattern>/app</url-pattern>
- </servlet-mapping>
- </web-app>