validtextarea.java

来自「自己写的tapestry 的带验证的DatePicker」· Java 代码 · 共 81 行

JAVA
81
字号
package nz.co.clever.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);
	}	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?