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?
steen wrote:
> 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
>
> Mize-ze wrote:
> > 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.prope rty,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.prope rty,this.value);
> >
> >
> >
> > return SKIP_BODY;
> > }
> >
> >
> > public int doEndTag()
> > {
> > return EVAL_PAGE;
> > }
> >
> >
> > }
> >
> > How should I implement the TreeTag class?
> > Thanks.
|