(续)为 ExtInputDate 写个 JSP tag。
没什么特别内容,基本上是 setter:
没什么特别内容,基本上是 setter:
java 代码
- public class ExtInputDateTag extends UIComponentELTag {
- private ValueExpression format;
- private ValueExpression width;
- private ValueExpression readonly;
- private ValueExpression disabled;
- private ValueExpression value;
- private ValueExpression styleClass;
- private ValueExpression required;
- @Override
- public String getComponentType() {
- return ExtInputDate.COMPONENT_TYPE;
- }
- @Override
- public String getRendererType() {
- return ExtInputDateRenderer.RENDERER_TYPE;
- }
- public void setFormat(ValueExpression format) {
- this.format = format;
- }
- public void setWidth(ValueExpression width) {
- this.width = width;
- }
- public void setReadonly(ValueExpression readonly) {
- this.readonly = readonly;
- }
- public void setDisabled(ValueExpression disabled) {
- this.disabled = disabled;
- }
- public void setValue(ValueExpression value) {
- this.value = value;
- }
- public void setStyleClass(ValueExpression styleClass) {
- this.styleClass = styleClass;
- }
- public void setRequired(ValueExpression required) {
- this.required = required;
- }
- @Override
- protected void setProperties(UIComponent component) {
- super.setProperties(component);
- if (null != format) {
- component.setValueExpression("format", format);
- }
- if (null != width) {
- component.setValueExpression("width", width);
- }
- if (null != readonly) {
- component.setValueExpression("readonly", readonly);
- }
- if (null != disabled) {
- component.setValueExpression("disabled", disabled);
- }
- if (null != value) {
- component.setValueExpression("value", value);
- }
- if (null != styleClass) {
- component.setValueExpression("styleClass", styleClass);
- }
- if (null != required) {
- component.setValueExpression("required", required);
- }
- }
- @Override
- public void release() {
- super.release();
- format = null;
- width = null;
- readonly = null;
- disabled = null;
- value = null;
- styleClass = null;
- required = null;
- }
- }
JSF 1.2 跟 1.1 不同的是,使用了ValueExpression 代替了以前的 ValueBinding。
如果是 action 和 actionListener,使用 MethodExpression。
最后,就是配置了,既长且臭...
TLD文件配置:
xml 代码
- <tag>
- <name>inputDate</name>
- <tag-class>example.ExtInputDateTag</tag-class>
- <body-content>JSP</body-content>
- <attribute>
- <name>rendered</name>
- <required>false</required>
- <deferred-value>
- <type>java.lang.Boolean</type>
- </deferred-value>
- </attribute>
- <attribute>
- <name>binding</name>
- <required>false</required>
- <deferred-value>
- <type>javax.faces.component.UIComponent</type>
- </deferred-value>
- </attribute>
- <attribute>
- <name>id</name>
- <required>false</required>
- <rtexprvalue>false</rtexprvalue>
- <type>java.lang.String</type>
- </attribute>
- <attribute>
- <name>format</name>
- <required>false</required>
- <deferred-value>
- <type>java.lang.String</type>
- </deferred-value>
- </attribute>
- <attribute>
- <name>width</name>
- <required>false</required>
- <deferred-value>
- <type>java.lang.Integer</type>
- </deferred-value>
- </attribute>
- <attribute>
- <name>readonly</name>
- <required>false</required>
- <deferred-value>
- <type>java.lang.Boolean</type>
- </deferred-value>
- </attribute>
- <attribute>
- <name>required</name>
- <required>false</required>
- <deferred-value>
- <type>java.lang.Boolean</type>
- </deferred-value>
- </attribute>
- <attribute>
- <name>disabled</name>
- <required>false</required>
- <deferred-value>
- <type>java.lang.Boolean</type>
- </deferred-value>
- </attribute>
- <attribute>
- <description>
- Only support java.util.Date and java.lang.String.
- </description>
- <name>value</name>
- <required>false</required>
- <deferred-value>
- <type>java.lang.Object</type>
- </deferred-value>
- </attribute>
- <attribute>
- <name>styleClass</name>
- <required>false</required>
- <deferred-value>
- <type>java.lang.String</type>
- </deferred-value>
- </attribute>
- </tag>
JSF 1.2 跟 JSF 1.1 稍为不同的是,数据类型使用 <deferred-value><type> some type </type></deffered-value>。
taglib 的写法:
xml 代码
- <taglib
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1">
- <!-- content -->
- </taglib>
faces-config.xml,略. 这个跟 JSF 1.1 一样。