validdatepicker.java

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

JAVA
92
字号
package nz.co.clever.components.valid;

import java.text.SimpleDateFormat;
import java.util.Date;

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.DatePicker;
import org.apache.tapestry.valid.DateValidator;
import org.apache.tapestry.valid.IValidationDelegate;
import org.apache.tapestry.valid.IValidator;
import org.apache.tapestry.valid.ValidatorException;

/**
 * @author Peter Butler
 */
public abstract class ValidDatePicker extends DatePicker { 
	private WriterErrorDecorator myWriter = new WriterErrorDecorator(this);
	
	public ValidDatePicker() {
		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("ValidDatePicker.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 {
			//TODO: This sucks pretty badly, connect them using OGNL instead?
			String format = getFormat();
			if (format == null)
				format = "dd MMM yyyy";
			DateValidator validator = (DateValidator)getValidator();
			validator.setFormat(new SimpleDateFormat(format));
			objectValue = getValidator().toObject(this, value);
		} catch (ValidatorException ex) {
			delegate.record(ex);
			return;
		}

		setValue((Date)objectValue);
	}
}

⌨️ 快捷键说明

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