Custom Tags in JSP and the ID attribute

M

Mize-ze

Hello,

I want to add a custom tag to my application so it will be more
mainatable.
Let's say I have some tree like structure that can be used like that in
a scriptlet:

AndOrTree t = new AndOrTree();
t.addCondition("1","eq","cpu-time","5");
t.addCondition("2","eq","size","8");
t.addAccumulator("3","1","2",AndOrTree.ACCUMULATOR.AND);
t.addCondition("4","eq","fullscans","0");
t.addAccumulator("5","3","4",AndOrTree.ACCUMULATOR.OR);
out.print(t.toString());

The addCondition and addAccumulator functions take as a first argument
an "id"
this id uniquelly identifies the node in the tree.

The addAccumulator takes two "ids" of nodes, which will be the new
Node's sons.

So basically when I create a new "Accumulator" with
t.addAccumulator("5","3","4",AndOrTree.ACCUMULATOR.OR); I create a new
Node with identifier 5 that is a parent of nodes 3 and 4.

Now, I want to keep the same functionallity under customer Tags.
In my vision, it should look something like that:

<aot:condition id="1" operator="<" property="size" value="8" >
<aot:condition id="2" operator="<" property="cpu-time" value="85" >
<aot:accumulator id="3" name1="1" name2="2" ...>

Since there is a Tree out there, I guess I should also implement a tag
that initializes the tree
The tree should also be transferred to other tags for reference, so it
should be something like that:

<aot:tree id="myTree">
<aot:condition tree="myTree" id="1" operator="<" property="size"
value="8" >
<aot:condition tree="myTree" id="2" operator="<" property="cpu-time"
value="85" >
<aot:accumulator tree="myTree" id="3" name1="1" name2="2" ...>

I "extended" TagSupport and did the previous bit of
tree.addCondition(this.id,this.operator,this.property,this.value)
inside the doStartTag () function.
My problem is with the TreeTag, How can I implement and extended
TagSupport that will have a reference to a AndOrTree that I can later
set as a member of the other Tag classes?

My tag handlers looks like that:
public class ConditionTag extends javax.servlet.jsp.tagext.TagSupport{

//For the TLD calls;
private String property;
private String operator;
private String value;
private AndOrTree tree;

/** Creates a new instance of ConditionTag */
public ConditionTag() {
}
public void setOperator(String operator) {
this.operator = operator;
}

public String getOperator() {
return operator;
}

public String getValue() {
return value;
}

public String getProperty() {
return property;
}

public void setValue(String value) {
this.value = value;
}

public void setProperty(String property) {
this.property = property;
}

public AndOrTree getTree() {
return tree;
}

public void setTree(AndOrTree tree) {
this.tree = tree;
}

public int doStartTag ()
{

tree.addCondition(this.id,this.operator,this.property,this.value);



return SKIP_BODY;
}


public int doEndTag()
{
return EVAL_PAGE;
}


}

How should I implement the TreeTag class?
Thanks.
 
S

steen

Well,
you could do a little something like this :

public class TreeTag extends javax.servlet.jsp.tagext.TagSupport {
private AndOrTree tree = new AndOrTree();

public AndOrTree getAndOrTree() {
return tree;
}
}

and then in your sub-tags, you can do this whenever you need the tree :
((TreeTag) getParent()).getAndOrTree()

but this requires that your condition and accumulator tags always are
inside a treetag.
<aot:tree>
<aot:condition .... />
<aot:accumulator ... />
</aot:tree>

/Steen
 
M

Mize-ze

I've tried something else, my JSP file looks something like that now:

<aot:tree id="tree" />
<aot:condition id="1" tree="tree" operator="eq" property="cpu-time"
value="5"/>


I assume that the id attribute in aot:tree relates to the TagSupport
object, Which I called treeTag.
The condition tag then gets the reference to the TreeTag which holds
the Tree object itself.
However I could not get it to work.
Any Ideas?


TreeTag:: public int doStartTag ()
{
this.treeObject = new AndOrTree();
return SKIP_BODY;
}

ConditionTag:: public void setTree(Tags.TreeTag tree) {
this.tree = tree;
this.treeObj = tree.getTreeObject();
}

Then the ConditionTag::doStartTag uses the treeObj!
Makes sense?
 
M

Mize-ze

I guess that my problem is that the tree attribute in condition tag is
treated by me as a TreeTag object in the setTree method:

public void setTree(Tags.TreeTag tree) {
this.tree = tree;
this.treeObj = tree.getTreeObject();
}

While from the JSP point of view I am transferring a string.
Is that my problem? how can I send a treeTag or better yet a real
AndOrTree?

Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,967
Messages
2,570,148
Members
46,694
Latest member
LetaCadwal

Latest Threads

Top