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 + -
显示快捷键?