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 ec8ff74 EMPIREDB-350 extended LinkTag for custom content
ec8ff74 is described below
commit ec8ff74048b1cf1b5a05e705649f6a1cb23a9db7
Author: Rainer Döbele <[email protected]>
AuthorDate: Fri May 7 15:36:43 2021 +0200
EMPIREDB-350
extended LinkTag for custom content
---
.../src/main/webapp/resources/empire/link.xhtml | 1 +
.../org/apache/empire/jsf2/components/LinkTag.java | 76 +++++++++++++++++++---
.../apache/empire/jsf2/components/MenuItemTag.java | 7 +-
3 files changed, 73 insertions(+), 11 deletions(-)
diff --git
a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/resources/empire/link.xhtml
b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/resources/empire/link.xhtml
index 49fb850..614f7b0 100644
---
a/empire-db-examples/empire-db-example-jsf2/src/main/webapp/resources/empire/link.xhtml
+++
b/empire-db-examples/empire-db-example-jsf2/src/main/webapp/resources/empire/link.xhtml
@@ -34,6 +34,7 @@
<!-- Implementation -->
<cc:implementation>
+ <cc:insertChildren/>
</cc:implementation>
</html>
\ No newline at end of file
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/LinkTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/LinkTag.java
index 53312f7..9663518 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/LinkTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/LinkTag.java
@@ -45,6 +45,7 @@ import org.apache.empire.jsf2.utils.ParameterMap;
import org.apache.empire.jsf2.utils.StringResponseWriter;
import org.apache.empire.jsf2.utils.TagEncodingHelper;
import org.apache.empire.jsf2.utils.TagEncodingHelperFactory;
+import org.apache.myfaces.shared.renderkit.html.HTML;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -68,6 +69,10 @@ public class LinkTag extends UIOutput // implements
NamingContainer
private boolean creatingComponents = false;
+ private boolean encodeLinkChildren = false;
+
+ private String disabledTagName;
+
public LinkTag()
{
log.trace("component link created");
@@ -127,16 +132,19 @@ public class LinkTag extends UIOutput // implements
NamingContainer
{
// add label and input components when the view is loaded for the
first time
super.encodeBegin(context);
-
+
// begin
helper.encodeBegin();
if (isLinkDisabled())
- { // render as span
- // render components
+ { // render disabled
ResponseWriter writer = context.getResponseWriter();
- String tag = writeStartElement(writer);
-
writer.write(StringUtils.toString(getLinkValue(helper.hasColumn()), ""));
- writer.endElement(tag);
+ Object linkValue = getLinkValue(helper.hasColumn());
+ this.disabledTagName = writeStartElement(writer);
+ this.encodeLinkChildren = isEncodeLinkChildren(linkValue);
+ if (!encodeLinkChildren)
+ { writer.write(StringUtils.toString(linkValue, ""));
+ writer.endElement(this.disabledTagName);
+ }
}
else
{ // Add component
@@ -195,18 +203,56 @@ public class LinkTag extends UIOutput // implements
NamingContainer
setLinkProperties(linkComponent);
addOrSetParam(linkComponent, "idparam", "id");
// encode link
- linkComponent.setRendered(true);
- linkComponent.encodeAll(context);
- linkComponent.setRendered(false); // Don't render twice!
+ this.encodeLinkChildren =
isEncodeLinkChildren(linkComponent.getChildCount()>0 ? null :
linkComponent.getValue());
+ if (this.encodeLinkChildren)
+ linkComponent.encodeBegin(context);
+ else
+ { // default rendering (no children)
+ linkComponent.setRendered(true);
+ linkComponent.encodeAll(context);
+ linkComponent.setRendered(false); // Don't render twice!
+ }
}
}
@Override
public void encodeChildren(FacesContext context) throws IOException
{
- if (!isLinkDisabled())
+ // render
+ if (this.encodeLinkChildren)
super.encodeChildren(context);
}
+
+ /**
+ * required for MenuItemTag
+ * @param context
+ * @throws IOException
+ */
+ public void forceEncodeChildren(FacesContext context) throws IOException
+ {
+ super.encodeChildren(context);
+ }
+
+ @Override
+ public void encodeEnd(FacesContext context) throws IOException
+ {
+ if (this.encodeLinkChildren)
+ {
+ if (isLinkDisabled())
+ { // Disabled
+ ResponseWriter writer = context.getResponseWriter();
+ writer.endElement(StringUtils.coalesce(this.disabledTagName,
HTML.SPAN_ELEM));
+ }
+ else
+ { // Enabled
+ HtmlOutcomeTargetLink link = getLinkComponent();
+ if (link!=null && link.isRendered())
+ link.encodeEnd(context);
+ }
+ }
+ // done
+ super.encodeEnd(context);
+ }
protected String getLinkStyleClass()
{
@@ -357,4 +403,14 @@ public class LinkTag extends UIOutput // implements
NamingContainer
* return (String) getAttributes().get("action");
* }
*/
+
+ protected boolean isEncodeLinkChildren(Object linkValue)
+ {
+ return ObjectUtils.isEmpty(linkValue);
+ }
+
+ protected HtmlOutcomeTargetLink getLinkComponent()
+ {
+ return (getChildCount()>0 ?
(HtmlOutcomeTargetLink)getChildren().get(0) : null);
+ }
}
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
index d4026bc..e5c4ab5 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
@@ -105,7 +105,7 @@ public class MenuItemTag extends LinkTag
else
log.warn("WARN: Unexpected child element as first child of
MenuItemTag!");
// encode children
- super.encodeChildren(context);
+ super.forceEncodeChildren(context);
}
}
@@ -258,4 +258,9 @@ public class MenuItemTag extends LinkTag
return (styleClass==null) ? newClass : styleClass+" "+newClass;
}
+ @Override
+ protected boolean isEncodeLinkChildren(Object linkValue)
+ {
+ return false;
+ }
}