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 2024/05/27 16:29:20 UTC
(empire-db) branch master updated: EMPIREDB-422 Buffix: ControlTag suppress rendering when IsFieldVisible=false
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 53862487 EMPIREDB-422 Buffix: ControlTag suppress rendering when IsFieldVisible=false
53862487 is described below
commit 53862487e7ed797ed0c0dbe690e4418417c9bc21
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Mon May 27 18:29:17 2024 +0200
EMPIREDB-422
Buffix: ControlTag suppress rendering when IsFieldVisible=false
---
.../apache/empire/jsf2/components/ControlTag.java | 75 ++++++++++-----
.../apache/empire/jsf2/components/InputTag.java | 101 +++++++++++----------
.../empire/jsf2/utils/TagEncodingHelper.java | 15 +--
3 files changed, 106 insertions(+), 85 deletions(-)
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 54406e7a..0c8b168c 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
@@ -86,8 +86,9 @@ public class ControlTag extends UIInput implements NamingContainer
return;
}
+ // Get Control and TagName
this.control = (ControlTag) parent;
- this.tagName = getTagName(control.renderInfo);
+ this.tagName = (this.control.controlVisible ? getTagName(control.renderInfo) : null);
// Start
if (tagName!=null && tagName.length()>0)
@@ -214,6 +215,9 @@ public class ControlTag extends UIInput implements NamingContainer
}
ControlTag controlTag = (ControlTag) parent;
+ if (!controlTag.controlVisible)
+ return; // Not visible!
+
InputControl control = controlTag.control;
InputControl.ValueInfo valInfo = controlTag.inpInfo;
@@ -244,6 +248,7 @@ public class ControlTag extends UIInput implements NamingContainer
protected boolean encodeLabel = true;
private boolean creatingComponents = false;
protected boolean valueValidated = false;
+ protected boolean controlVisible = true;
public ControlTag()
{
@@ -347,12 +352,29 @@ public class ControlTag extends UIInput implements NamingContainer
return super.getClientId(context);
}
+ @Override
+ public boolean getRendersChildren()
+ {
+ // render children ourselves using
+ // encodeChildren(FacesContext context)
+ return true;
+ }
+
+ /*
+ * Add label and input components when the view is loaded for the first time
+ */
@Override
public void encodeBegin(FacesContext context)
throws IOException
{
- // add label and input components when the view is loaded for the first time
super.encodeBegin(context);
+
+ // init
+ helper.encodeBegin();
+
+ // set InputControl
+ if (this.control==null)
+ this.control = helper.getInputControl();
// renderInfo
if (this.renderInfo==null) {
@@ -361,13 +383,11 @@ public class ControlTag extends UIInput implements NamingContainer
this.renderInfo=ControlRenderInfo.DEFAULT_CONTROL_RENDER_INFO; // No FormGrid found. Use Default!
}
- // init
- helper.encodeBegin();
- this.control = helper.getInputControl();
- boolean isCustomInput = isCustomInput();
-
- // encodeBegin
- if (renderInfo.CONTROL_TAG!=null)
+ // Check visiblity
+ this.controlVisible = helper.isVisible();
+
+ // Render
+ if (this.controlVisible && renderInfo.CONTROL_TAG!=null)
{ // control wrapper tag
ResponseWriter writer = context.getResponseWriter();
writer.startElement(renderInfo.CONTROL_TAG, this);
@@ -379,7 +399,7 @@ public class ControlTag extends UIInput implements NamingContainer
helper.writeStyleClass(writer, TagStyleClass.CONTROL.get(), controlClass, styleClass);
}
- // LabelSeparatorComponent
+ // Encode LabelSeparatorComponent
if (this.encodeLabel)
{ // Create Label Separator Tag
ControlSeparatorComponent labelSepTag = null;
@@ -396,10 +416,13 @@ public class ControlTag extends UIInput implements NamingContainer
}
}
// encode
- labelSepTag.encodeAll(context);
+ labelSepTag.setRendered(this.controlVisible);
+ if (this.controlVisible)
+ labelSepTag.encodeAll(context);
}
- // InputSeparatorComponent
+ // Encode InputSeparatorComponent
+ boolean isCustomInput = isCustomInput();
if (!isCustomInput)
{ // Create Input Separator Tag
ControlSeparatorComponent inputSepTag = null;
@@ -416,23 +439,29 @@ public class ControlTag extends UIInput implements NamingContainer
}
}
// encode
- inputSepTag.encodeAll(context);
+ inputSepTag.setRendered(this.controlVisible);
+ if (this.controlVisible)
+ inputSepTag.encodeAll(context);
}
// done
saveState();
}
- @Override
- public boolean getRendersChildren()
- {
- return true;
- }
-
@Override
public void encodeChildren(FacesContext context)
throws IOException
{
- if (isRendered() && isCustomInput())
+ /*
+ * Composite component renderer must render children for custom components
+ * <cc:implementation>
+ * <c:choose>
+ * <c:when test="#{cc.attrs.custom == true}">
+ * <cc:insertChildren/>
+ * </c:when>
+ * </c:choose>
+ * </cc:implementation>
+ */
+ if (this.controlVisible && isCustomInput())
{ // Custom input
ResponseWriter writer = null;
String tagName = renderInfo.INPUT_WRAPPER_TAG;
@@ -462,14 +491,14 @@ public class ControlTag extends UIInput implements NamingContainer
public void encodeEnd(FacesContext context)
throws IOException
{
- // call base
- super.encodeEnd(context);
// encodeEnd
- if (renderInfo.CONTROL_TAG!=null)
+ if (this.controlVisible && renderInfo.CONTROL_TAG!=null)
{ // control wrapper tag
ResponseWriter writer = context.getResponseWriter();
writer.endElement(renderInfo.CONTROL_TAG);
}
+ // call base
+ super.encodeEnd(context);
}
public boolean isCustomInput()
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 614ea4e9..f4cec37e 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
@@ -32,10 +32,8 @@ import javax.faces.convert.ConverterException;
import javax.faces.view.AttachedObjectHandler;
import org.apache.empire.data.Column;
-import org.apache.empire.db.DBRecordBase;
import org.apache.empire.db.exceptions.FieldIllegalValueException;
import org.apache.empire.exceptions.EmpireException;
-import org.apache.empire.exceptions.InvalidArgumentException;
import org.apache.empire.jsf2.controls.InputControl;
import org.apache.empire.jsf2.utils.TagEncodingHelper;
import org.apache.empire.jsf2.utils.TagEncodingHelperFactory;
@@ -134,41 +132,24 @@ public class InputTag extends UIInput implements NamingContainer
return super.getClientId(context);
}
+ @Override
+ public boolean getRendersChildren()
+ {
+ // render children ourselves using
+ // encodeChildren(FacesContext context)
+ return true;
+ }
+
@Override
public void encodeBegin(FacesContext context)
throws IOException
{
- // add label and input components when the view is loaded for the first time
super.encodeBegin(context);
// get Control (before checking visible)
helper.encodeBegin();
- // Check visibility
- if (helper.isVisible() == false)
- { // not visible
- setRendered(false);
- // Check column
- Column column = helper.getColumn();
- if (column==null)
- throw new InvalidArgumentException("column", null);
- // Check record
- Object record = helper.getRecord();
- if (record!=null && (record instanceof DBRecordBase) && ((DBRecordBase)record).isValid())
- { // Check if column exists
- if (((DBRecordBase)record).getFieldIndex(column)<0)
- throw new InvalidArgumentException("column", column.getName());
- // not visible
- log.info("Column {} is not visible for record of {} and will not be rendered!", column.getName(), ((DBRecordBase)record).getRowSet().getName());
- }
- else
- { // Record not valid
- log.warn("Invalid Record provided for column {}. Input will not be rendered!", column.getName());
- }
- return; // not visible
- }
-
- // render
+ // create child components
this.control = helper.getInputControl();
this.inpInfo = helper.getInputInfo(context);
// set required
@@ -184,33 +165,53 @@ public class InputTag extends UIInput implements NamingContainer
control.updateInputState(this, inpInfo, context, context.getCurrentPhaseId());
}
- // set readonly
+ // Set Render Input
+ boolean controlVisible = helper.isVisible();
boolean renderValue = helper.isRenderValueComponent();
- setRenderInput(!renderValue);
-
- // wrapperTag
- String wrapperTag = helper.writeWrapperTag(context, true, renderValue);
- // render components
- if (renderValue)
- { // render value
- String tagName = "span";
- String styleClass = helper.getTagStyleClass(TagStyleClass.INPUT_DIS.get());
- String tooltip = helper.getValueTooltip(helper.getTagAttributeValue("title"));
- control.renderValue(this, tagName, styleClass, tooltip, inpInfo, context);
- }
- else
- { // render input
- control.renderInput(this, inpInfo, context);
- }
- // wrapperTagEnd
- if (wrapperTag!=null)
- { // control wrapper tag
- ResponseWriter writer = context.getResponseWriter();
- writer.endElement(wrapperTag);
+ setRenderInput(!renderValue && controlVisible);
+ // Render when visible
+ if (controlVisible)
+ { // Render now
+ String wrapperTag = helper.writeWrapperTag(context, true, renderValue);
+ // render components
+ if (renderValue)
+ { // render value
+ String tagName = "span";
+ String styleClass = helper.getTagStyleClass(TagStyleClass.INPUT_DIS.get());
+ String tooltip = helper.getValueTooltip(helper.getTagAttributeValue("title"));
+ control.renderValue(this, tagName, styleClass, tooltip, inpInfo, context);
+ }
+ else
+ { // render input
+ control.renderInput(this, inpInfo, context);
+ }
+ // wrapperTagEnd
+ if (wrapperTag!=null)
+ { // control wrapper tag
+ ResponseWriter writer = context.getResponseWriter();
+ writer.endElement(wrapperTag);
+ }
}
saveState();
}
+ @Override
+ public void encodeChildren(FacesContext context)
+ throws IOException
+ {
+ // Ignore this
+ // super.encodeChildren(context);
+ log.debug("InputTag:encodeChildren is ignored");
+ }
+
+ @Override
+ public void encodeEnd(FacesContext context)
+ throws IOException
+ {
+ // call base
+ super.encodeEnd(context);
+ }
+
@Override
public String getId()
{
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 648809d3..cdd561bd 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
@@ -1061,7 +1061,7 @@ public class TagEncodingHelper implements NamingContainer
public boolean beginValidateValue(FacesContext ctx, Object value)
{
if (UIInput.isEmpty(value) && FacesUtils.getWebApplication().isPartialSubmit(ctx))
- { // don't validate null values
+ { // don't validate empty values
return false;
}
// continue
@@ -1071,19 +1071,10 @@ public class TagEncodingHelper implements NamingContainer
public boolean beginUpdateModel(FacesContext ctx, Object value)
{
if (UIInput.isEmpty(value) && FacesUtils.getWebApplication().isPartialSubmit(ctx))
- { // Value is null, but required
+ { // Partial submit for empty value
String partialCompId = FacesUtils.getWebApplication().getPartialSubmitComponentId(ctx);
- String componentId = this.component.getClientId();
- boolean isThisComponent = partialCompId.startsWith(componentId);
- if (isThisComponent==false)
- { // Ignore other components
- if (log.isInfoEnabled())
- log.info("Ignoring UpdateModel for PartialSubmit on column {}. ComponentId=\"{}\"", getColumnFullName(), partialCompId);
- return false;
- }
- // Perform update on this component
if (log.isInfoEnabled())
- log.info("Performing UpdateModel for PartialSubmit on column {}", getColumnFullName());
+ log.info("Performing UpdateModel for PartialSubmit on column {} from {}", getColumnFullName(), partialCompId);
}
// continue
return true;