论坛首页 Java企业应用论坛

tapestry中有没有带验证功能的textarea?

浏览 4070 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-01-07  
tapestry中有validfield,是一个text,单行的.有没有textarea,多行的?
   发表时间:2005-01-08  
textarea要验证的时候很少吧。

你可以自己写javascript亚。。

这个不难 制定  <span jwcid="t@TextArea" value="ognl:xxx"/>

form1.t.value.length<1000;
0 请登录后投票
   发表时间: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();;
	}
}
0 请登录后投票
   发表时间: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范围,没办法,只好自己写了,想偷懒都不行。
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics