The Common-Controls Tag Library

<ctrl:tree>

Generates a construction element based on a TreeGroupDataModel. The layout of the tree can be defined in the JSP-Page.
The <tree>-tag can only be used in conjunction with a bean that implements the TreeGroupDataModel Interface or is derived from TreeListControl.
../images/images/tree2.gif

Body content: JSP
Tag class: TreeTag
 

[ Syntax ]

Standard Syntax
<ctrl:tree
labelProperty = "String"
[ action = "String" ]
[ ajax = "Boolean" ]
[ border = "Integer" ]
[ buttons = "boolean" ]
[ checkboxes = "boolean" ]
[ disabled = "boolean" ]
[ enableProperty = "String" ]
[ expandMode = "{full | single | multiple}" ]
[ filter = "boolean" ]
[ formElement = "boolean" ]
[ groupselect = "boolean" ]
[ height = "String" ]
[ id = "String" ]
[ imagemap = "String" ]
[ imageProperty = "String" ]
[ labelWrap = "" ]
[ lines = "boolean" ]
[ linesAtRoot = "boolean" ]
[ locale = "String" ]
[ maxlength = "Integer" ]
[ name = "String" ]
[ onblur = "String" ]
[ onchange = "String" ]
[ oncheck = "String" ]
[ onclick = "String" ]
[ oncollapse = "String" ]
[ oncontextmenu = "String" ]
[ ondblclick = "String" ]
[ onexpand = "String" ]
[ onexpandex = "String" ]
[ onfocus = "String" ]
[ onkeydown = "String" ]
[ onkeypress = "String" ]
[ onkeyup = "String" ]
[ onmousedown = "String" ]
[ onmousemove = "String" ]
[ onmouseout = "String" ]
[ onmouseover = "String" ]
[ onmouseup = "String" ]
[ onuncheck = "String" ]
[ permission = "ACL" ]
[ property = "String" ]
[ root = "boolean" ]
[ runat = "{server | client | auto}" ]
[ scope = "{any | page | request | session | application}" ]
[ scrollHeight = "String" ]
[ shadow = "boolean" ]
[ style = "String" ]
[ styleClass = "String" ]
[ styleId = "String" ]
[ summary = "String" ]
[ tabindex = "Integer" ]
[ target = "String" ]
[ targetProperty = "String" ]
[ tooltipProperty = "String" ]
[ transaction = "Boolean" ]
[ width = "String" ]
>
...Body Content...

</ctrl:tree>
 

[ Attributes ]

AttributeTypeDescriptionReq.RTExp
actionString Specifies the Struts Action that is to be called in case of control element events.

This attribute need not be specified if the tag is included within a Struts <html:form> tag. In that case, the name of the action is determined using the Struts Form Bean.

Annotation: The action must be declared in one of the struts-config.xml files.

 
ajaxBoolean Activates the AJAX function of the column. With AJAX all control events will be sent asynchronously to the application server where the processing takes place.

The event processing on the server is the same as without AJAX enabled. However the application developer has the possibility to control the response output through some additional methods of the AjaxRequest interface (the base class for ActionContext).

The normal AJAX server processing (-> AjaxRequest.isAjaxCanceled() == false) will send back a XML stream to the Web Browser. This stream contains only the HTML code for the dirty controls, which will be merged in the Browser through a JavaScript handler into the current HTML DOM Tree. So the Server will not transmit the full HTML page!

  • (+) The transfered HTML code is much smaller.
  • (+) The HTML page stays in the Browser window while the server request is being processed. So the screen will not "flicker".
  • (-) The browser will not keep track of AJAX requests in the navigation history!
  • (-) AJAX depends on JavaScript. Without JavaScript the event will result in a normal browser - server round trip.

Most of the Controls will add themselves to the dirty list of the ActionContext. This is done through a call to AjaxRequest.markDirty(). With this method the application developer has the opportunity to add additional controls to the dirty list and send them back to the browser in the XML stream. This is necessary when an event handler changes the state of a second control that was not the originator of the request.

In some cases it is not sufficient to send back only the dirty control because the whole HTML page has to be changed. In this cases the application developer can cancel AJAX server event processing by calling the AjaxRequest.cancelAjaxRequest() method. When the AJAY request is canceled the framework will send a full HTML page back to the Browser - as if this was a normal HTTP request.

The Common-Controls AJAX XML Protocol has the following format:


<?xml version="1.0" encoding="UTF-8" ?>
<ajax-response>
	<token/>
	<controls>
		<control styleId="" class="" name="">
			<html>
				<[CDATA[...]] >
			</html>
		</control>
	</controls>
</ajax-response>

				
 
borderInteger Specifies the thickness of the border that has to be drawn around the control element.  
buttonsboolean Indicates whether, in case of group nodes, buttons for exploding or closing the branch should be displayed.

This option has no effect if the expandMode of the tree structure is set to full. In that case, buttons are never shown.

 
checkboxesboolean Indicates whether a checkbox should be displayed before the tree entries.

The tree entries must implement the Checkable Interface, so that the control element can draw the checkboxes. Group nodes must not implement this interface, since the Check-State of groups can be automatically calculated with the help of the state of the pages.

 
disabledboolean This attribute can be used to disable the control element. It then does not accept any user inputs and does not generate any control element events.  
enablePropertyString Indicates the name of a property, with the help of which the drilldown function can be disabled in the relevant line.

For this, the TreeNode-Bean must provide a corresponding Property Getter, which returns a Boolean data type.

Annotation: Valid Java identifier/label. The TreeNode-Bean must implement a suitable property-getter method.

 
expandModeExpansionMode This attribute specifies how many nodes of the tree structure may be displayed exploded at the same time.
  • full = All nodes are shown exploded at all times. The user cannot close any node.
  • single = Only one branch can be exploded.
  • multiple = As many branches as desired can be exploded.
 
filterboolean Spcifies if the node labels should be html encoded.  
formElementboolean This attribute is used to control how the control element should behave in case of a user action.
As form element
A submit of the surrounding form is carried out. All the information about the control element event is transported to the server in hidden fields.
As an independent control element
Control element events are directly triggered in the form of hyperlinks. All the data input in the HTML page is then lost.
Internally, this attribute is used to control how the control element should generate Painter links - as HTML-A tags or HTML-Input tags.

Annotation: The value true may only be used when the control element is situated in a form.

 
groupselectboolean Specifies whether, for the group nodes of the tree structure, a Click Eventhandler should be called.  
heightString Sets the height of the control element. The height may be specified in absolute or percent terms.

See the HTML documentation

 
idString The name of a page scope JSP bean that will contain the current element. Using the given Id, the variable can be accessed in scripting expressions in the tag Body. The id mus be a string lteral because the JSP compiler generates a variable withthis name at compile time

Annotation: A valid Java identifier must be given.

 
imagemapString Specifies the name of an Imagemap which must be saved in the request. The values that the ImageProperty returns are mapped to the entries of this Imagemap. The mapping is done with the help of the regular expression, which is assigned to every entry of the Imagemap.

The Framework appends, in the case of group nodes, to the value of the ImageProperty, the character strings .open or .closed, in order to be able to distinguish between the open and closed states

By default, the framework uses a folder icon as the image for group nodes.

Annotation: Under the name, there must be an Imagemap saved in the request.

 
imagePropertyString Specifies the property using which an image can be assigned to every Row-Bean.

The image names do not designate any direct HTML-resources; rather, they are translated into the actual resource names with the help of the Imagemap.

Annotation: Valid Java designator/label for a property which has to be implemented by every Row-Bean!

 
labelPropertyString Specifies the property using which a label can be assigned to every Row-Bean.

Annotation: Valid Java designator/label for a property which has to be implemented by every Row-Bean!

labelWrap 
linesboolean Specifies whether connecting lines should be drawn between the construction elements.  
linesAtRootboolean Specifies whether lines should be drawn to the construction elements of the uppermost (displayed) level.  
localeString enables localization for the control element. String literals will be interpreted as keys in the Application.properties file.

Annotation: boolean value true oder false oder the name of a locale.

 
maxlengthInteger Specifies the maximum number of characters which should be displayed for labels on the tree nodes. If the maxlength is exceeded, a hint "..." is displayed.
This functionality is not provided if the filter-attribute is set to false. In this case the number of visible characters can not be detected, because the String can contain some html data.
 
nameString Specifies the name of the Java-Bean. The Java-Bean must be stored in the given scope.

When the tag is surrounded by a Struts <html:form> tag, no Bean Name need be specified. In this case, the Java-Bean is drawn via a property of the Struts Form Bean.

Annotation: A valid Java identifier must be given.

 
onblurString Fires when the object loses the input focus.

Annotation: JavaScript Code

 
onchangeString Fires when the contents of the object or selection have changed.

Annotation: JavaScript Code

 
oncheckString Fires when a checkbox is checked

Annotation: JavaScript Code

 
onclickString Fires when the user clicks the left mouse button on the object.

Annotation: JavaScript Code

 
oncollapseString Fires when a tree node is collapsed

Annotation: JavaScript Code

 
oncontextmenuString Fires when the user clicks the right mouse button in the client area, opening the context menu.

Annotation: JavaScript Code

 
ondblclickString Fires when the user double-clicks the object.

Annotation: JavaScript Code

 
onexpandString Fires when a tree node is expanded

Annotation: JavaScript Code

 
onexpandexString Fires when a tree node with unknown child count is expanded

Annotation: JavaScript Code

 
onfocusString Fires when the object receives focus.

Annotation: JavaScript Code

 
onkeydownString Fires when the user presses a key.

Annotation: JavaScript Code

 
onkeypressString Fires when the user presses an alphanumeric key.

Annotation: JavaScript Code

 
onkeyupString Fires when the user releases a key.

Annotation: JavaScript Code

 
onmousedownString Fires when the user clicks the object with either mouse button.

Annotation: JavaScript Code

 
onmousemoveString Fires when the user moves the mouse over the object.

Annotation: JavaScript Code

 
onmouseoutString Fires when the user moves the mouse pointer outside the boundaries of the object.

Annotation: JavaScript Code

 
onmouseoverString Fires when the user moves the mouse pointer into the object.

Annotation: JavaScript Code

 
onmouseupString Fires when the user releases a mouse button while the mouse is over the object.

Annotation: JavaScript Code

 
onuncheckString Fires when a checkbox is unchecked

Annotation: JavaScript Code

 
permissionACL With this attribute, access to the element can be restricted.

Authorizations are checked using the com.cc.framework.security.Principal object in the user session. The principal object is registered in the session with the method com.cc.framework.security.SecurityUtil#registerPrincipal(HttpSession, Principal). It is made available by the application developer by implementing the principal interface. In this manner, any authorization system can be very easily connected within the framework.

Authorizations are always specified in the form of an Access Control List (ACL). What is involved here is a semicolon-delimited list with individual authorizations. The framweork supports the following authorization types, which, however, can be expanded at will by the application developer:

Literal
true|false -> com.cc.framework.security.StaticPermission
Role
#rolename -> com.cc.framework.security.RoleBasedPermission
Function
$functionname -> com.cc.framework.security.FunctionBasedPermission

 
propertyString Specifies the name of the property using which the Java-Bean is to be accessed. This is generally only necessary when the Java-Bean is associated with a Struts Form Bean.

Annotation: A valid Java identifier must be given.

 
rootboolean Specifies whether the root node of the tree structure (Level 0) should be displayed or whether the display should first start at the next tree level(Level 1).

Definition: A tree always has exactly one root!

 
runatRunAt This attribute specifies whether, for the control element, Clientside JavaScript should be used, or whether the control element should work purely with Server Roundtrips.
  • server = All control element actions result in a Server Roundtrip and are processed on the server.
  • client = control element actions are carried out directly in the browser of the user. It depends on the Painter Factory used and the specific control element, how far the support for Clientside Scripting goes!
  • auto = The framework selects based on the users browser settings "client" when JavaScript is enabled and "server" when JavaScript is disabled.
 
scopeHTTPScope This attribute shows the Scope in which the Java-Bean with the actual display data can be found.
  • any = The Bean is searched for in ever Scope.
  • page = The Bean exists as a local variable in the JSP Page.
  • request = The Bean is in the HTTP-Request.
  • session = The Bean is in the HTTP-Session.
  • application = The Bean is in the Servletkontext.
 
scrollHeightString Specifies the height of the scrollable body for the control.

Note: If the scrollHeight-Attribute is set, the width-Attribute for each column- and columngroup-Tag needs to be specified!

Annotation: See HTML documentation for the attribute width.

 
shadowboolean Specifies whether the control element should be saved with a shadow.

This function is only available in the case of specific Painterfactories.

 
styleString An HTML-style can be directly specified with this attribute.

Annotation: See HTML documentation for the attribute style.

 
styleClassString The HTML-class attribute of the element can be specified with this attribute.

Annotation: See HTML documentation for the attribute class.

 
styleIdString The HTML-id attribute of the element can be specified with this attribute.

Annotation: See HTML documentation for the Attribute id.

 
summaryString This property can be used for rendering to non-visual media such as speech or Braille.  
tabindexInteger Tabulator Index for this element.  
targetString The HTML-target attribute of the element can be specified with this attribute.

Annotation: See HTML documentation for the attribute target.

 
targetPropertyString Specifies the name of a property with the help of which the relevant line can generate an HTML-target attribute.

Annotation: Valid Java identifier/label. The Row-Bean must implement a suitable property-getter method.

 
tooltipPropertyString Specifies the name of a property with the help of which the relevant line can generate an HTML-text attribute.

Annotation: Valid Java identifier/label. The Row-Bean must implement a suitable property-getter method.

 
transactionBoolean This flag directs the framework to append a transaction token to all generated hyperlinks. The transactio token allows the detection of form re-submissions (multiple submission of the same HTTP form).  
widthString Sets the width of the control element. The height may be specified in absolute or percent terms.

See the HTML documentation

 
 

[ Server Events ]

EventDescription
Check
public void control_onCheck(
	ControlActionContext ctx,
	String key,
	SelectMode mode,
	boolean checked) throws Exception
Collapse
public void control_onCollapse(
	ControlActionContext ctx,
	String key) throws Exception
Expand
public void control_onExpand(
	ControlActionContext ctx,
	String key) throws Exception
ExpandEx
public void control_onExpandEx(
	ControlActionContext ctx,
	String key) throws Exception

[ Example ]

Generates a simple tree.


<%@ taglib uri="http://www.common-controls.com/cc/tags-ctrl"    prefix="ctrl" %>
<%@ taglib uri="http://www.common-controls.com/cc/tags-util"   prefix="util" %>

<util:imagemap name="im_product">
    <util:imagemapping  rule="group.open"    src="images/imgBoxOpen.gif"    width="16"  height="16"/>
    <util:imagemapping  rule="group.closed"  src="images/imgBoxClosed.gif"  width="16"  height="16"/>
    <util:imagemapping  rule="product"       src="images/imgItem.gif"       width="16"  height="16"/>
    <util:imagemapping  rule="variant"       src="images/imgItems.gif"      width="16"  height="16"/>
</util:imagemap>

<ctrl:tree
    id="tree1"
    width="100%"
    name="productTree"
    action="/product"
    expandMode="multiple"
    buttons="true"
    lines="true"
    checkboxes="false"
    root="false"
    labelProperty="productName"
    imageProperty="productType"
    imagemap="im_product"
    linesAtRoot="true"
    groupselect="false"/>