This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new 2bcbb018 EMPIREDB-436 ControlTag and InputTag: prevent processUpdates
propagation to children.
2bcbb018 is described below
commit 2bcbb01825c0764816cd7533418f1e1fd650251d
Author: Rainer Döbele <[email protected]>
AuthorDate: Fri Sep 27 14:14:30 2024 +0200
EMPIREDB-436
ControlTag and InputTag: prevent processUpdates propagation to children.
---
.../empire/jakarta/components/ControlTag.java | 33 ++++++++++++++++++++++
.../apache/empire/jakarta/components/InputTag.java | 33 ++++++++++++++++++++++
.../empire/jakarta/controls/InputControl.java | 32 +++++++++++++++++++++
.../empire/jakarta/utils/TagEncodingHelper.java | 5 ++--
.../apache/empire/jsf2/components/ControlTag.java | 33 ++++++++++++++++++++++
.../apache/empire/jsf2/components/InputTag.java | 33 ++++++++++++++++++++++
.../apache/empire/jsf2/controls/InputControl.java | 32 +++++++++++++++++++++
.../empire/jsf2/utils/TagEncodingHelper.java | 5 ++--
8 files changed, 202 insertions(+), 4 deletions(-)
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
index 938d136f..59d89bab 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/ControlTag.java
@@ -732,6 +732,39 @@ public class ControlTag extends UIInput implements
NamingContainer
this.valueValidated = true;
}
}
+
+ @Override
+ public void processUpdates(FacesContext context)
+ {
+ // Added for EMPIREDB-436 on 2024-09-27
+ try
+ {
+ // setCachedFacesContext(context);
+ pushComponentToEL(context, this);
+ if (!isRendered())
+ {
+ return;
+ }
+ try
+ {
+ updateModel(context);
+ }
+ catch (RuntimeException e)
+ {
+ context.renderResponse();
+ throw e;
+ }
+ if (!isValid())
+ {
+ context.renderResponse();
+ }
+ }
+ finally
+ {
+ // setCachedFacesContext(null);
+ popComponentFromEL(context);
+ }
+ }
@Override
public void updateModel(FacesContext context)
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/InputTag.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/InputTag.java
index 4460ce72..7f24c4e9 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/InputTag.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/components/InputTag.java
@@ -344,6 +344,39 @@ public class InputTag extends UIInput implements
NamingContainer
this.valueValidated = true;
}
}
+
+ @Override
+ public void processUpdates(FacesContext context)
+ {
+ // Added for EMPIREDB-436 on 2024-09-27
+ try
+ {
+ // setCachedFacesContext(context);
+ pushComponentToEL(context, this);
+ if (!isRendered())
+ {
+ return;
+ }
+ try
+ {
+ updateModel(context);
+ }
+ catch (RuntimeException e)
+ {
+ context.renderResponse();
+ throw e;
+ }
+ if (!isValid())
+ {
+ context.renderResponse();
+ }
+ }
+ finally
+ {
+ // setCachedFacesContext(null);
+ popComponentFromEL(context);
+ }
+ }
@Override
public void updateModel(FacesContext context)
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/InputControl.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/InputControl.java
index 4b690841..e5eaed45 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/InputControl.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/InputControl.java
@@ -339,6 +339,8 @@ public abstract class InputControl
return; /* May want to override this */
// Clear submitted value
clearSubmittedValue(input);
+ // Clear local values
+ clearLocalValues(fc, input);
}
public Object getInputValue(UIComponent comp, InputInfo ii, boolean
submitted)
@@ -517,6 +519,36 @@ public abstract class InputControl
if (reqMap.containsKey(clientId))
reqMap.remove(clientId);
}
+
+ protected void clearLocalValues(FacesContext context, UIComponent comp)
+ {
+ // UIInput
+ if (comp instanceof UIInput)
+ {
+ UIInput input = (UIInput)comp;
+ if (input.isLocalValueSet())
+ { input.setValue(null);
+ input.setLocalValueSet(false);
+ // log.debug("clearLocalValues performed for {}",
input.getClass().getName());
+ }
+ }
+ // clearLocalValues of all facets and children of this UIComponent
+ if (comp.getFacetCount() > 0)
+ {
+ for (UIComponent facet : comp.getFacets().values())
+ {
+ clearLocalValues(context, facet);
+ }
+ }
+ // clear children
+ if (comp.getChildCount() > 0)
+ {
+ for (UIComponent child : comp.getChildren())
+ {
+ clearLocalValues(context, child);
+ }
+ }
+ }
protected Object formatInputValue(Object value, InputInfo ii)
{
diff --git
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
index 5d201500..c4a80696 100644
---
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
+++
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/utils/TagEncodingHelper.java
@@ -1303,8 +1303,9 @@ public class TagEncodingHelper implements NamingContainer
return ((Options) attr);
if (hasColumn())
{ // Do we have a record?
- if ((getRecord() instanceof Record) && ((Record)
record).isValid())
- return ((Record) record).getFieldOptions(unwrapColumn(column));
+ Object rec = (this.record!=null ? this.record : findRecord());
+ if ((rec instanceof Record) && ((Record)rec).isValid())
+ return ((Record)rec).getFieldOptions(unwrapColumn(column));
// get From Column
return column.getOptions();
}
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
index b8facc77..a4be6891 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ControlTag.java
@@ -732,6 +732,39 @@ public class ControlTag extends UIInput implements
NamingContainer
this.valueValidated = true;
}
}
+
+ @Override
+ public void processUpdates(FacesContext context)
+ {
+ // Added for EMPIREDB-436 on 2024-09-27
+ try
+ {
+ // setCachedFacesContext(context);
+ pushComponentToEL(context, this);
+ if (!isRendered())
+ {
+ return;
+ }
+ try
+ {
+ updateModel(context);
+ }
+ catch (RuntimeException e)
+ {
+ context.renderResponse();
+ throw e;
+ }
+ if (!isValid())
+ {
+ context.renderResponse();
+ }
+ }
+ finally
+ {
+ // setCachedFacesContext(null);
+ popComponentFromEL(context);
+ }
+ }
@Override
public void updateModel(FacesContext context)
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
index c9d32df5..6ced44c8 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/InputTag.java
@@ -344,6 +344,39 @@ public class InputTag extends UIInput implements
NamingContainer
this.valueValidated = true;
}
}
+
+ @Override
+ public void processUpdates(FacesContext context)
+ {
+ // Added for EMPIREDB-436 on 2024-09-27
+ try
+ {
+ // setCachedFacesContext(context);
+ pushComponentToEL(context, this);
+ if (!isRendered())
+ {
+ return;
+ }
+ try
+ {
+ updateModel(context);
+ }
+ catch (RuntimeException e)
+ {
+ context.renderResponse();
+ throw e;
+ }
+ if (!isValid())
+ {
+ context.renderResponse();
+ }
+ }
+ finally
+ {
+ // setCachedFacesContext(null);
+ popComponentFromEL(context);
+ }
+ }
@Override
public void updateModel(FacesContext context)
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
index 8f4452bf..2e6b43f9 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
@@ -339,6 +339,8 @@ public abstract class InputControl
return; /* May want to override this */
// Clear submitted value
clearSubmittedValue(input);
+ // Clear local values
+ clearLocalValues(fc, input);
}
public Object getInputValue(UIComponent comp, InputInfo ii, boolean
submitted)
@@ -517,6 +519,36 @@ public abstract class InputControl
if (reqMap.containsKey(clientId))
reqMap.remove(clientId);
}
+
+ protected void clearLocalValues(FacesContext context, UIComponent comp)
+ {
+ // UIInput
+ if (comp instanceof UIInput)
+ {
+ UIInput input = (UIInput)comp;
+ if (input.isLocalValueSet())
+ { input.setValue(null);
+ input.setLocalValueSet(false);
+ // log.debug("clearLocalValues performed for {}",
input.getClass().getName());
+ }
+ }
+ // clearLocalValues of all facets and children of this UIComponent
+ if (comp.getFacetCount() > 0)
+ {
+ for (UIComponent facet : comp.getFacets().values())
+ {
+ clearLocalValues(context, facet);
+ }
+ }
+ // clear children
+ if (comp.getChildCount() > 0)
+ {
+ for (UIComponent child : comp.getChildren())
+ {
+ clearLocalValues(context, child);
+ }
+ }
+ }
protected Object formatInputValue(Object value, InputInfo ii)
{
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index e7067b6c..bd6daa3d 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -1303,8 +1303,9 @@ public class TagEncodingHelper implements NamingContainer
return ((Options) attr);
if (hasColumn())
{ // Do we have a record?
- if ((getRecord() instanceof Record) && ((Record)
record).isValid())
- return ((Record) record).getFieldOptions(unwrapColumn(column));
+ Object rec = (this.record!=null ? this.record : findRecord());
+ if ((rec instanceof Record) && ((Record)rec).isValid())
+ return ((Record)rec).getFieldOptions(unwrapColumn(column));
// get From Column
return column.getOptions();
}