Author: nbelaevski
Date: 2010-05-28 15:43:18 -0400 (Fri, 28 May 2010)
New Revision: 17387
Added:
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/ParameterHandler.java
Removed:
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/AbstractParameterHandler.java
Modified:
root/ui/core/trunk/ui/src/main/java/org/richfaces/component/AbstractParameter.java
Log:
a4j:param:
- code style improvements applied
- Abstract* class made abstract
- PSH support added
- TagHadler class renamed
Modified:
root/ui/core/trunk/ui/src/main/java/org/richfaces/component/AbstractParameter.java
===================================================================
---
root/ui/core/trunk/ui/src/main/java/org/richfaces/component/AbstractParameter.java 2010-05-28
19:41:30 UTC (rev 17386)
+++
root/ui/core/trunk/ui/src/main/java/org/richfaces/component/AbstractParameter.java 2010-05-28
19:43:18 UTC (rev 17387)
@@ -21,16 +21,10 @@
package org.richfaces.component;
-import org.ajax4jsf.Messages;
-import org.ajax4jsf.component.JavaScriptParameter;
-import org.richfaces.cdk.annotations.JsfComponent;
-import org.richfaces.cdk.annotations.Tag;
-import org.richfaces.cdk.annotations.TagType;
-
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.FacesException;
-import javax.faces.component.UIComponentBase;
+import javax.faces.component.PartialStateHolder;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
@@ -38,23 +32,26 @@
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
+import org.ajax4jsf.Messages;
+import org.ajax4jsf.component.JavaScriptParameter;
+import org.richfaces.cdk.annotations.JsfComponent;
+import org.richfaces.cdk.annotations.Tag;
+import org.richfaces.cdk.annotations.TagType;
+import org.richfaces.util.PartialStateHolderUtil;
+
/**
* @author shura (latest modification by $Author: alexsmirnov $)
* @version $Revision: 1.1.2.2 $ $Date: 2007/02/01 15:31:55 $
*/
-@JsfComponent(tag = @Tag(name = "param", handler =
"org.richfaces.view.facelets.html.AbstractParameterHandler", generate = false,
type = TagType.Facelets))
-public class AbstractParameter extends UIParameter implements ActionListener,
- JavaScriptParameter {
- public static final String COMPONENT_TYPE = "org.richfaces.UIParameter";
- private static String noEscapeAttr = "noEscape";
+@JsfComponent(tag = @Tag(name = "param", handler =
"org.richfaces.view.facelets.html.ParameterHandler", generate = false, type =
TagType.Facelets))
+public abstract class AbstractParameter extends UIParameter implements ActionListener,
JavaScriptParameter {
+
+ public static final String COMPONENT_TYPE = "org.richfaces.Parameter";
- /** ********************************************************* */
+ public static final String COMPONENT_FAMILY = UIParameter.COMPONENT_FAMILY;
+
+ private static final String ASSIGN_TO = "assignTo";
- /**
- * Binding for update on ActionEvent
- */
- private ValueExpression assignToBinding = null;
-
/** ********************************************************* */
/**
@@ -64,21 +61,20 @@
/** ********************************************************* */
- /**
- * Skip quota escaping of parameter value - for substitute JavaScript
- * exspression on submit
- */
- private Boolean noEscape = null;
-
- public void setAssignToBinding(ValueExpression propertyBinding) {
- this.assignToBinding = propertyBinding;
+ public abstract boolean isNoEscape();
+ public abstract void setNoEscape(boolean noEscape);
+
+ public void setAssignToExpression(ValueExpression ve) {
+ setValueExpression(ASSIGN_TO, ve);
}
- public ValueExpression getAssignToBinding() {
- return assignToBinding;
+ public ValueExpression getAssignToExpression() {
+ return getValueExpression(ASSIGN_TO);
}
public void setConverter(Converter converter) {
+ clearInitialState();
+
this.converter = converter;
}
@@ -86,54 +82,29 @@
return converter;
}
- /*
- * (non-Javadoc)
- *
- * @see org.ajax4jsf.framework.ajax.JavaScriptParameter#setNoEscape(boolean)
- */
-
- public void setNoEscape(boolean noEscape) {
- this.noEscape = Boolean.valueOf(noEscape);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.ajax4jsf.framework.ajax.JavaScriptParameter#isNoEscape()
- */
-
- public boolean isNoEscape() {
- return isValueOrBinding(noEscape, noEscapeAttr);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
javax.faces.event.ActionListener#processAction(javax.faces.event.ActionEvent)
- */
-
public void processAction(ActionEvent actionEvent)
throws AbortProcessingException {
FacesContext context = getFacesContext();
ELContext elContext = context.getELContext();
- ValueExpression updateBinding = getAssignToBinding();
+ ValueExpression updateBinding = getAssignToExpression();
if (updateBinding != null && (!updateBinding.isReadOnly(elContext))) {
- Object requestValue = context.getExternalContext()
+ String requestValue = context.getExternalContext()
.getRequestParameterMap().get(getName());
- if (requestValue != null && requestValue instanceof String) {
+ Object convertedValue = requestValue;
+
+ if (requestValue != null) {
Class<?> type = updateBinding.getType(elContext);
Converter converter = createConverter(context, type);
if (null != converter) {
- requestValue = converter.getAsObject(context, this,
- (String) requestValue);
+ convertedValue = converter.getAsObject(context, this, requestValue);
}
}
- if (null != requestValue) {
- updateBinding.setValue(elContext, requestValue);
+ if (null != convertedValue) {
+ updateBinding.setValue(elContext, convertedValue);
}
}
}
@@ -197,67 +168,62 @@
return converter;
}
- /*
- * (non-Javadoc)
- *
- * @see
javax.faces.component.UIComponentBase#restoreState(javax.faces.context.FacesContext)
- */
-
@Override
- public void restoreState(FacesContext context, Object state) {
- Object[] values = (Object[]) state;
+ public void markInitialState() {
+ super.markInitialState();
+
+ Converter c = getConverter();
+ if (c instanceof PartialStateHolder) {
+ ((PartialStateHolder) c).markInitialState();
+ }
+ }
- super.restoreState(context, values[0]);
- // restore fields values
- assignToBinding = (ValueExpression) UIComponentBase
- .restoreAttachedState(context, values[1]);
- noEscape = (Boolean) values[2];
- converter = (Converter) UIComponentBase.restoreAttachedState(context,
- values[3]);
+ @Override
+ public void clearInitialState() {
+ if (initialStateMarked()) {
+ super.clearInitialState();
+
+ Converter c = getConverter();
+ if (c instanceof PartialStateHolder) {
+ ((PartialStateHolder) c).clearInitialState();
+ }
+ }
}
- /*
- * (non-Javadoc)
- *
- * @see
javax.faces.component.UIComponentBase#saveState(javax.faces.context.FacesContext)
- */
@Override
public Object saveState(FacesContext context) {
- Object[] values = new Object[5];
-
- values[0] = super.saveState(context);
-
- // save fields values
- values[1] = UIComponentBase.saveAttachedState(context, assignToBinding);
- values[2] = noEscape;
- values[3] = UIComponentBase.saveAttachedState(context, converter);
-
- return values;
+ if (context == null) {
+ throw new NullPointerException();
+ }
+
+ Object superState = super.saveState(context);
+ Object converterState = PartialStateHolderUtil.saveState(context, this,
converter);
+
+ if (superState == null && converterState == null) {
+ return null;
+ }
+
+ return new Object[] {
+ superState,
+ converterState
+ };
}
- /**
- * @param field -
- * value of field to get.
- * @param name -
- * name of field, to get from ValueBinding
- * @return boolean value, based on field or valuebinding.
- */
- private boolean isValueOrBinding(Boolean field, String name) {
- if (null != field) {
- return field.booleanValue();
+
+ @Override
+ public void restoreState(FacesContext context, Object state) {
+ if (context == null) {
+ throw new NullPointerException();
}
- ValueExpression vb = getValueExpression(name);
-
- if (null != vb) {
- FacesContext context = getFacesContext();
- ELContext elContext = context.getELContext();
-
- return ((Boolean) vb.getValue(elContext)).booleanValue();
- } else {
- return false;
+ if (state == null) {
+ return;
}
+
+ Object[] values = (Object[]) state;
+ super.restoreState(context, values[0]);
+ converter = (Converter) PartialStateHolderUtil.restoreState(context, values[1],
converter);
}
}
Deleted:
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/AbstractParameterHandler.java
===================================================================
---
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/AbstractParameterHandler.java 2010-05-28
19:41:30 UTC (rev 17386)
+++
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/AbstractParameterHandler.java 2010-05-28
19:43:18 UTC (rev 17387)
@@ -1,173 +0,0 @@
-/**
- * License Agreement.
- *
- * Rich Faces - Natural Ajax for Java Server Faces (JSF)
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-package org.richfaces.view.facelets.html;
-
-import org.ajax4jsf.Messages;
-import org.richfaces.component.AbstractParameter;
-
-import javax.faces.component.ActionSource;
-import javax.faces.component.UIComponent;
-import javax.faces.convert.Converter;
-import javax.faces.view.facelets.ComponentConfig;
-import javax.faces.view.facelets.ComponentHandler;
-import javax.faces.view.facelets.FaceletContext;
-import javax.faces.view.facelets.MetaRule;
-import javax.faces.view.facelets.MetaRuleset;
-import javax.faces.view.facelets.Metadata;
-import javax.faces.view.facelets.MetadataTarget;
-import javax.faces.view.facelets.TagAttribute;
-import javax.faces.view.facelets.TagAttributeException;
-
-/**
- * @author shura (latest modification by $Author: alexsmirnov $)
- * @version $Revision: 1.1.2.1 $ $Date: 2007/02/01 15:31:23 $
- */
-public class AbstractParameterHandler extends ComponentHandler {
-
- private static final ActionParamMetaRule ACTION_PARAM_META_RULE = new
ActionParamMetaRule();
-
- /**
- * @author shura (latest modification by $Author: alexsmirnov $)
- * @version $Revision: 1.1.2.1 $ $Date: 2007/02/01 15:31:23 $
- */
- public static class ActionParamMetaRule extends MetaRule {
-
- /*
- * (non-Javadoc)
- *
- * @see
org.ajax4jsf.tag.SuggestionHandler.SuggestionMetaRule#applyRule(java.lang.String,
- * com.sun.facelets.tag.TagAttribute,
- * com.sun.facelets.tag.MetadataTarget)
- */
-
- public Metadata applyRule(String name, TagAttribute attribute,
- MetadataTarget meta) {
- if (meta.isTargetInstanceOf(AbstractParameter.class)) {
- if ("assignTo".equals(name)) {
- return new AssignToValueBindingMetadata(attribute);
- } else if ("converter".equals(name)) {
- if (attribute.isLiteral()) {
- return new LiteralConverterMetadata(attribute
- .getValue());
- } else {
- return new DynamicConverterMetadata(attribute);
- }
-
- }
- }
-
- return null;
- }
-
- }
-
- static final class LiteralConverterMetadata extends Metadata {
-
- private final String converterId;
-
- public LiteralConverterMetadata(String converterId) {
- this.converterId = converterId;
- }
-
- public void applyMetadata(FaceletContext ctx, Object instance) {
- ((AbstractParameter) instance).setConverter(ctx.getFacesContext()
- .getApplication().createConverter(this.converterId));
- }
- }
-
- static final class DynamicConverterMetadata extends Metadata {
-
- private final TagAttribute attr;
-
- public DynamicConverterMetadata(TagAttribute attr) {
- this.attr = attr;
- }
-
- public void applyMetadata(FaceletContext ctx, Object instance) {
- ((AbstractParameter) instance).setConverter((Converter) this.attr
- .getObject(ctx, Converter.class));
- }
- }
-
- static final class AssignToValueBindingMetadata extends Metadata {
-
- private final TagAttribute attr;
-
- public AssignToValueBindingMetadata(TagAttribute attr) {
- this.attr = attr;
- }
-
- public void applyMetadata(FaceletContext ctx, Object instance) {
- ((AbstractParameter) instance).setAssignToBinding(attr
- .getValueExpression(ctx, Object.class));
- }
- }
-
- private TagAttribute assignTo;
- private TagAttribute converter;
-
- /**
- * @param config
- */
- public AbstractParameterHandler(ComponentConfig config) {
- super(config);
- assignTo = getAttribute("assignTo");
- converter = getAttribute("converter");
-
- if (null != assignTo) {
- if (assignTo.isLiteral()) {
- throw new TagAttributeException(this.tag, this.assignTo,
- Messages.getMessage(Messages.MUST_BE_EXPRESSION_ERROR));
- }
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
- * javax.faces.component.UIComponent)
- */
-
- public void onComponentCreated(FaceletContext ctx, UIComponent c,
- UIComponent parent) {
- if (parent instanceof ActionSource) {
- if (assignTo != null) {
- AbstractParameter al = (AbstractParameter) c;
- ((ActionSource) parent).addActionListener(al);
- }
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.ajax4jsf.tag.AjaxComponentHandler#createMetaRuleset(java.lang.Class)
- */
-
- protected MetaRuleset createMetaRuleset(Class type) {
- MetaRuleset metaRules = super.createMetaRuleset(type);
- metaRules.addRule(ACTION_PARAM_META_RULE);
- return metaRules;
- }
-
-}
Copied:
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/ParameterHandler.java
(from rev 17375,
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/AbstractParameterHandler.java)
===================================================================
---
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/ParameterHandler.java
(rev 0)
+++
root/ui/core/trunk/ui/src/main/java/org/richfaces/view/facelets/html/ParameterHandler.java 2010-05-28
19:43:18 UTC (rev 17387)
@@ -0,0 +1,171 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.view.facelets.html;
+
+import javax.faces.component.ActionSource;
+import javax.faces.component.UIComponent;
+import javax.faces.convert.Converter;
+import javax.faces.view.facelets.ComponentConfig;
+import javax.faces.view.facelets.ComponentHandler;
+import javax.faces.view.facelets.FaceletContext;
+import javax.faces.view.facelets.MetaRule;
+import javax.faces.view.facelets.MetaRuleset;
+import javax.faces.view.facelets.Metadata;
+import javax.faces.view.facelets.MetadataTarget;
+import javax.faces.view.facelets.TagAttribute;
+import javax.faces.view.facelets.TagAttributeException;
+
+import org.ajax4jsf.Messages;
+import org.richfaces.component.AbstractParameter;
+
+/**
+ * @author shura (latest modification by $Author: alexsmirnov $)
+ * @version $Revision: 1.1.2.1 $ $Date: 2007/02/01 15:31:23 $
+ */
+public class ParameterHandler extends ComponentHandler {
+
+ private static final ActionParamMetaRule ACTION_PARAM_META_RULE = new
ActionParamMetaRule();
+
+ /**
+ * @author shura (latest modification by $Author: alexsmirnov $)
+ * @version $Revision: 1.1.2.1 $ $Date: 2007/02/01 15:31:23 $
+ */
+ public static class ActionParamMetaRule extends MetaRule {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
org.ajax4jsf.tag.SuggestionHandler.SuggestionMetaRule#applyRule(java.lang.String,
+ * com.sun.facelets.tag.TagAttribute,
+ * com.sun.facelets.tag.MetadataTarget)
+ */
+
+ public Metadata applyRule(String name, TagAttribute attribute,
+ MetadataTarget meta) {
+ if (meta.isTargetInstanceOf(AbstractParameter.class)) {
+ if ("assignTo".equals(name)) {
+ return new AssignToValueExpressionMetadata(attribute);
+ } else if ("converter".equals(name)) {
+ if (attribute.isLiteral()) {
+ return new LiteralConverterMetadata(attribute
+ .getValue());
+ } else {
+ return new DynamicConverterMetadata(attribute);
+ }
+
+ }
+ }
+
+ return null;
+ }
+
+ }
+
+ static final class LiteralConverterMetadata extends Metadata {
+
+ private final String converterId;
+
+ public LiteralConverterMetadata(String converterId) {
+ this.converterId = converterId;
+ }
+
+ public void applyMetadata(FaceletContext ctx, Object instance) {
+ ((AbstractParameter) instance).setConverter(ctx.getFacesContext()
+ .getApplication().createConverter(this.converterId));
+ }
+ }
+
+ static final class DynamicConverterMetadata extends Metadata {
+
+ private final TagAttribute attr;
+
+ public DynamicConverterMetadata(TagAttribute attr) {
+ this.attr = attr;
+ }
+
+ public void applyMetadata(FaceletContext ctx, Object instance) {
+ ((AbstractParameter) instance).setConverter((Converter) this.attr
+ .getObject(ctx, Converter.class));
+ }
+ }
+
+ static final class AssignToValueExpressionMetadata extends Metadata {
+
+ private final TagAttribute attr;
+
+ public AssignToValueExpressionMetadata(TagAttribute attr) {
+ this.attr = attr;
+ }
+
+ public void applyMetadata(FaceletContext ctx, Object instance) {
+ ((AbstractParameter) instance).setAssignToExpression(attr
+ .getValueExpression(ctx, Object.class));
+ }
+ }
+
+ private TagAttribute assignTo;
+
+ /**
+ * @param config
+ */
+ public ParameterHandler(ComponentConfig config) {
+ super(config);
+ assignTo = getAttribute("assignTo");
+
+ if (null != assignTo) {
+ if (assignTo.isLiteral()) {
+ throw new TagAttributeException(this.tag, this.assignTo,
+ Messages.getMessage(Messages.MUST_BE_EXPRESSION_ERROR));
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
+ * javax.faces.component.UIComponent)
+ */
+
+ public void onComponentCreated(FaceletContext ctx, UIComponent c,
+ UIComponent parent) {
+ if (parent instanceof ActionSource) {
+ if (assignTo != null) {
+ AbstractParameter al = (AbstractParameter) c;
+ ((ActionSource) parent).addActionListener(al);
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.ajax4jsf.tag.AjaxComponentHandler#createMetaRuleset(java.lang.Class)
+ */
+
+ protected MetaRuleset createMetaRuleset(Class type) {
+ MetaRuleset metaRules = super.createMetaRuleset(type);
+ metaRules.addRule(ACTION_PARAM_META_RULE);
+ return metaRules;
+ }
+
+}