You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2012/09/05 12:15:28 UTC
svn commit: r1381125 - in
/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2:
app/FacesUtils.java components/ControlTag.java components/InputTag.java
utils/TagEncodingHelper.java
Author: doebele
Date: Wed Sep 5 10:15:28 2012
New Revision: 1381125
URL: http://svn.apache.org/viewvc?rev=1381125&view=rev
Log:
EMPIREDB-157
JSF2 allow to skip input validation for Input and Control Tags
Modified:
empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java
empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java?rev=1381125&r1=1381124&r2=1381125&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/FacesUtils.java Wed Sep 5 10:15:28 2012
@@ -33,6 +33,7 @@ import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
+import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.jsf2.pages.Page;
import org.apache.empire.jsf2.pages.PageDefinition;
@@ -45,6 +46,8 @@ public class FacesUtils
{
private static final Logger log = LoggerFactory.getLogger(FacesUtils.class);
+
+ public static final String SKIP_INPUT_VALIDATION_PARAM = "empire.jsf.input.skipValidation";
/* App */
@@ -281,5 +284,12 @@ public class FacesUtils
fc.getExternalContext().getRequestMap().put("CLEAR_SUBMITTED_VALUES", validate);
}
*/
+
+ public static boolean isSkipInputValidation(final FacesContext fc)
+ {
+ // Skip validate
+ String val = FacesUtils.getRequestParam(fc, SKIP_INPUT_VALIDATION_PARAM);
+ return (val!=null && ObjectUtils.getBoolean(val));
+ }
}
Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java?rev=1381125&r1=1381124&r2=1381125&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java Wed Sep 5 10:15:28 2012
@@ -448,8 +448,8 @@ public class ControlTag extends UIInput
// Validate value
inpInfo.validate(value);
setValid(true);
- // call base class
- super.validateValue(context, value);
+ // don't call base class!
+ // super.validateValue(context, value);
}
@Override
Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java?rev=1381125&r1=1381124&r2=1381125&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java Wed Sep 5 10:15:28 2012
@@ -176,8 +176,8 @@ public class InputTag extends UIInput im
// Validate value
inpInfo.validate(value);
setValid(true);
- // call base class
- super.validateValue(context, value);
+ // don't call base class!
+ // super.validateValue(context, value);
}
@Override
Modified: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java?rev=1381125&r1=1381124&r2=1381125&view=diff
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java (original)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java Wed Sep 5 10:15:28 2012
@@ -272,6 +272,9 @@ public class TagEncodingHelper implement
@Override
public void validate(Object value)
{
+ // skip?
+ if (skipValidation)
+ return;
// Make sure null values are not forced to be required
boolean isNull = ObjectUtils.isEmpty(value);
if (isNull)
@@ -341,6 +344,7 @@ public class TagEncodingHelper implement
private InputControl control = null;
private TextResolver textResolver = null;
private Object mostRecentValue = null;
+ private boolean skipValidation = false;
public TagEncodingHelper(UIOutput tag, String tagCssStyle)
{
@@ -365,7 +369,7 @@ public class TagEncodingHelper implement
{ Object req = ve.getValue(FacesContext.getCurrentInstance().getELContext());
if (req!=null)
tagRequired = new Boolean(ObjectUtils.getBoolean(req));
- }
+ }
}
}
@@ -459,9 +463,17 @@ public class TagEncodingHelper implement
public InputControl.InputInfo getInputInfo(FacesContext ctx)
{
+ // Skip validate
+ skipValidation = FacesUtils.isSkipInputValidation(ctx);
+ // create
return new InputInfoImpl(getColumn(), getTextResolver(ctx));
}
+ public boolean isSkipValidation()
+ {
+ return skipValidation;
+ }
+
public boolean hasColumn()
{
if (column == null)
@@ -516,7 +528,7 @@ public class TagEncodingHelper implement
}
return null;
}
-
+
private boolean isDetectFieldChange()
{
Object v = this.getTagAttribute("detectFieldChange");
@@ -561,9 +573,10 @@ public class TagEncodingHelper implement
public void setDataValue(Object value)
{
if (getRecord() != null)
- { // value
+ { // value
if (record instanceof Record)
- { /* special case
+ { getColumn();
+ /* special case
if (value==null && getColumn().isRequired())
{ // ((Record)record).isFieldRequired(column)==false
log.warn("Unable to set null for required field!");
@@ -572,16 +585,39 @@ public class TagEncodingHelper implement
*/
if (isDetectFieldChange())
{ // DetectFieldChange by comparing current and most recent value
- Object currentValue = ((Record) record).getValue(getColumn());
+ Object currentValue = ((Record) record).getValue(column);
if (!ObjectUtils.compareEqual(currentValue, mostRecentValue))
{ // Value has been changed by someone else!
- log.info("Concurrent data change for "+getColumn().getName()+". Current Value is {}. Ignoring new value {}", currentValue, value);
+ log.info("Concurrent data change for "+column.getName()+". Current Value is {}. Ignoring new value {}", currentValue, value);
return;
}
}
- // a record
- ((Record) record).setValue(getColumn(), value);
- mostRecentValue = value;
+ // check whether to skip validation
+ boolean reenableValidation = false;
+ if (skipValidation && (record instanceof DBRecord))
+ { // Ignore read only values
+ if (this.isReadOnly())
+ return;
+ // Column required?
+ if (column.isRequired() && ObjectUtils.isEmpty(value))
+ return; // Cannot set required value to null
+ // Disable Validation
+ reenableValidation = ((DBRecord)record).isValidateFieldValues();
+ if (reenableValidation)
+ ((DBRecord)record).setValidateFieldValues(false);
+ // Validation skipped for
+ if (log.isDebugEnabled())
+ log.debug("Input Validation skipped for {}.", column.getName());
+ }
+ // Now, set the value
+ try {
+ ((Record) record).setValue(column, value);
+ mostRecentValue = value;
+ } finally {
+ // re-enable validation
+ if (reenableValidation)
+ ((DBRecord)record).setValidateFieldValues(true);
+ }
}
else if (record instanceof RecordData)
{ // a record