浏览 4070 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-01-07
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-01-08
textarea要验证的时候很少吧。
你可以自己写javascript亚。。 这个不难 制定 <span jwcid="t@TextArea" value="ognl:xxx"/> form1.t.value.length<1000; |
|
返回顶楼 | |
发表时间:2005-01-14
我也忘记在哪里找到的了如下:
三个文件: ValidTextArea.java: package com.tomxp.web.components.valid; import org.apache.tapestry.ApplicationRuntimeException; import org.apache.tapestry.IForm; import org.apache.tapestry.IMarkupWriter; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.Tapestry; import org.apache.tapestry.form.TextArea; import org.apache.tapestry.valid.IValidationDelegate; import org.apache.tapestry.valid.IValidator; import org.apache.tapestry.valid.ValidatorException; /** * @author Peter Butler */ public abstract class ValidTextArea extends TextArea { WriterErrorDecorator myWriter = new WriterErrorDecorator(this);; public ValidTextArea(); { super();; } public abstract IValidator getValidator();; public abstract String getDisplayName();; protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle); { IForm form = getForm(cycle);; IValidationDelegate delegate = form.getDelegate();; if (delegate == null); throw new ApplicationRuntimeException(Tapestry.format("ValidTextArea.no-delegate", getExtendedId();, getForm();.getExtendedId(););, this, null, null);; IValidator validator = getValidator();; if (validator == null); throw Tapestry.createRequiredParameterException(this, "validator");; boolean rendering = !cycle.isRewinding();; IMarkupWriter superWriter; if (rendering); { delegate.writePrefix(writer, cycle, this, validator);; myWriter.init(writer, delegate, validator, cycle);; superWriter = myWriter; } else { superWriter = writer; } super.renderComponent(superWriter, cycle);; String name = getName();; if (!rendering && !isDisabled();); { String value = cycle.getRequestContext();.getParameter(name);; updateValue(value);; } if (rendering); { delegate.writeSuffix(writer, cycle, this, validator);; myWriter.clear();; } } protected void updateValue(String value); { Object objectValue = null; IValidationDelegate delegate = getForm();.getDelegate();; delegate.recordFieldInputValue(value);; try { objectValue = getValidator();.toObject(this, value);; } catch (ValidatorException ex); { delegate.record(ex);; return; } setValue((String);objectValue);; } } ValidTextArea.jwc <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE component-specification PUBLIC "-//Apache Software Foundation//Tapestry Specification 3.0//EN" "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd"> <!-- generated by Spindle, http://spindle.sourceforge.net --> <component-specification class="com.tomxp.web.components.valid.ValidTextArea" allow-body="no"> <description> A multi-line valid text area. </description> <parameter name="value" type="java.lang.String" required="yes" direction="form"/> <parameter name="disabled" type="boolean" direction="in"/> <parameter name="validator" type="org.apache.tapestry.valid.IValidator" required="yes" direction="in"> <description> Converts value to a string and parses strings back into object values. </description> </parameter> <parameter name="displayName" type="java.lang.String" required="yes" direction="auto"> <description> Name used by FieldLabel and when generating validation error messages. </description> </parameter> <reserved-parameter name="name"/> <property-specification name="name" type="java.lang.String"/> <property-specification name="form" type="org.apache.tapestry.IForm"/> </component-specification> package com.tomxp.web.components.valid; import org.apache.tapestry.IMarkupWriter; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.form.IFormComponent; import org.apache.tapestry.valid.IValidationDelegate; import org.apache.tapestry.valid.IValidator; /** * @author Peter Butler */ public class WriterErrorDecorator implements IMarkupWriter { private IMarkupWriter actual; private IValidationDelegate delegate; private IValidator validator; private IRequestCycle cycle; private IFormComponent field; public WriterErrorDecorator(IFormComponent field); { this.field = field; } public void init(IMarkupWriter actual, IValidationDelegate delegate, IValidator validator, IRequestCycle cycle); { this.actual = actual; this.delegate = delegate; this.validator = validator; this.cycle = cycle; } public void clear(); { this.actual = null; this.delegate = null; this.validator = null; this.cycle = null; } public void attribute(String name, int value); { actual.attribute(name, value);; } public void attribute(String name, boolean value); { actual.attribute(name, value);; } public void attribute(String name, String value); { actual.attribute(name, value);; } public void attributeRaw(String name, String value); { actual.attributeRaw(name, value);; } public void begin(String name); { actual.begin(name);; validator.renderValidatorContribution(field, this, cycle);; delegate.writeAttributes(this, cycle, field, validator);; } public void beginEmpty(String name); { actual.beginEmpty(name);; validator.renderValidatorContribution(field, this, cycle);; delegate.writeAttributes(this, cycle, field, validator);; } public boolean checkError(); { return actual.checkError();; } public void close(); { actual.close();; } public void closeTag(); { actual.closeTag();; } public void comment(String value); { actual.comment(value);; } public void end(); { actual.end();; } public void end(String name); { actual.end(name);; } public void flush(); { actual.flush();; } public IMarkupWriter getNestedWriter(); { return actual.getNestedWriter();; } public void print(char[] data, int offset, int length); { actual.print(data, offset, length);; } public void print(char value); { actual.print(value);; } public void print(int value); { actual.print(value);; } public void print(String value); { actual.print(value);; } public void println(); { actual.println();; } public void printRaw(char[] buffer, int offset, int length); { actual.printRaw(buffer, offset, length);; } public void printRaw(String value); { actual.printRaw(value);; } public String getContentType(); { return actual.getContentType();; } } |
|
返回顶楼 | |
发表时间:2005-01-17
对于TextArea的长度验证,的确只有自己写组件。特别是当页面中已经使用Tapestry的FieldLabel+Validator效验的时候,如果仅仅是简单的将JS写在HTML里面,就会出现无法于Tapestry动态生成的JavaScript整合的问题。。。
我看了一下Ewaves贴的代码,似乎没有贴出.script文件。我自己写的组件虽然和上面的代码完全不一样,但是.script文件却是可以通用的,它能够自动生成动态的javascript。 <?xml version="1.0" encoding="GBK"?> <!-- $Id: DatePicker.script,v 1.5 2004/03/09 18:23:50 hlship Exp $ --> <!DOCTYPE script PUBLIC "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN" "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd"> <script> <!-- input symbols: textAreaScript: The TextAreaScript component. output symbols: formValidateFunction The name of a form validator function that validates the fields. --> <include-script resource-path="/org/apache/tapestry/valid/Validator.js"/> <input-symbol key="textAreaScript" class="com.cdmcs.tapestry.jwc.TextAreaScript"/> <set key="name" expression="textAreaScript.name"/> <set key="required" expression="textAreaScript.required"/> <set key="minimumLength" expression="textAreaScript.minimumLength"/> <set key="maximumLength" expression="textAreaScript.maximumLength"/> <set key="requiredMessage" expression="textAreaScript.requiredMessage"/> <set key="minimumLengthMessage" expression="textAreaScript.minimumLengthMessage"/> <set key="maximumLengthMessage" expression="textAreaScript.maximumLengthMessage"/> <set key="numberFormatEnable" expression="textAreaScript.numberFormatEnable"/> <set key="numberLengthMessage" expression="textAreaScript.numberLengthMessage"/> <set key="numberLength" expression="textAreaScript.numberLength"/> <let key="baseName"> document.${textAreaScript.form.name}.${name} </let> <let key="formValidateFunction" unique="yes"> validate_${name} </let> <body> <![CDATA[ function ${formValidateFunction}(); { var field = ${baseName}; var keycode = window.event.keyCode; if ( ${numberFormatEnable} && !field.value.match(/^\d{11}$/); ); { if( field.value.length == 0 ); return true; return validator_invalid_field(field, "${numberLengthMessage}");; } if ( ${required} && field.value.length==0 ); { return validator_invalid_field(field, "${requiredMessage}");; } if ( ${required} && field.value.length<${minimumLength}); { return validator_invalid_field(field, "${minimumLengthMessage}");; } if ( ${required} && field.value.length>${maximumLength}); { return validator_invalid_field(field, "${maximumLengthMessage}");; } return true; } ]]> </body> </script> 我这段代码另外还有个功能,是效验11位手机号码,因为11的长度远大于Tapestry提动的NumberValidator范围,没办法,只好自己写了,想偷懒都不行。 |
|
返回顶楼 | |
发表时间:2005-01-20
gzdlw 写道 对于TextArea的长度验证,的确只有自己写组件。特别是当页面中已经使用Tapestry的FieldLabel+Validator效验的时候,如果仅仅是简单的将JS写在HTML里面,就会出现无法于Tapestry动态生成的JavaScript整合的问题。。。
我看了一下Ewaves贴的代码,似乎没有贴出.script文件。我自己写的组件虽然和上面的代码完全不一样,但是.script文件却是可以通用的,它能够自动生成动态的javascript。 <?xml version="1.0" encoding="GBK"?> <!-- $Id: DatePicker.script,v 1.5 2004/03/09 18:23:50 hlship Exp $ --> <!DOCTYPE script PUBLIC "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN" "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd"> <script> <!-- input symbols: textAreaScript: The TextAreaScript component. output symbols: formValidateFunction The name of a form validator function that validates the fields. --> <include-script resource-path="/org/apache/tapestry/valid/Validator.js"/> <input-symbol key="textAreaScript" class="com.cdmcs.tapestry.jwc.TextAreaScript"/> <set key="name" expression="textAreaScript.name"/> <set key="required" expression="textAreaScript.required"/> <set key="minimumLength" expression="textAreaScript.minimumLength"/> <set key="maximumLength" expression="textAreaScript.maximumLength"/> <set key="requiredMessage" expression="textAreaScript.requiredMessage"/> <set key="minimumLengthMessage" expression="textAreaScript.minimumLengthMessage"/> <set key="maximumLengthMessage" expression="textAreaScript.maximumLengthMessage"/> <set key="numberFormatEnable" expression="textAreaScript.numberFormatEnable"/> <set key="numberLengthMessage" expression="textAreaScript.numberLengthMessage"/> <set key="numberLength" expression="textAreaScript.numberLength"/> <let key="baseName"> document.${textAreaScript.form.name}.${name} </let> <let key="formValidateFunction" unique="yes"> validate_${name} </let> <body> <![CDATA[ function ${formValidateFunction}(); { var field = ${baseName}; var keycode = window.event.keyCode; if ( ${numberFormatEnable} && !field.value.match(/^\d{11}$/); ); { if( field.value.length == 0 ); return true; return validator_invalid_field(field, "${numberLengthMessage}");; } if ( ${required} && field.value.length==0 ); { return validator_invalid_field(field, "${requiredMessage}");; } if ( ${required} && field.value.length<${minimumLength}); { return validator_invalid_field(field, "${minimumLengthMessage}");; } if ( ${required} && field.value.length>${maximumLength}); { return validator_invalid_field(field, "${maximumLengthMessage}");; } return true; } ]]> </body> </script> 我这段代码另外还有个功能,是效验11位手机号码,因为11的长度远大于Tapestry提动的NumberValidator范围,没办法,只好自己写了,想偷懒都不行。 PatternValidator - validates text for a specified pattern |
|
返回顶楼 | |