使用自定义标记库的嵌套标记

时间:2015-05-08 21:51:28

标签: java taglib

我正在实现一个自定义标记库,它将根据输入的属性值输出html元素。例如,我有一个类似于以下内容的标记结构:

glBindImageTexture()

functionModule标记扩展了TagSupport。在doStartTag()方法中,我读取了属性" type的值。"如果它等于"形式"然后我使用JspWriter生成一个HTML元素,输出如下所示。

<util:functionModule functionModule="Z_UCES_UPDATE_NAME" cssClass="col-xs-12" type="form">
  <util:field inputType="text" field="I_NAME_LAST" placeHolder="Last Name"></util:field>
 </util:functionModule>

这对它本身很有用,但我需要在表单中间的内容,如输入,按钮等。出于某种原因,当我使用JspWriter输出表单html时,嵌套标签内部不输出他们的HTML。

我的理解是,只要我回来&#34; EVAL_BODY_INCLUDE&#34;我的其他嵌套标签将被调用,他们可以通过JspWriter输出他们的html。这是我的标记处理程序代码

<form name="hello-world" class="my-class" method="post" action="helloWorld.do"></form>
//FunctionModule Tag Classs
public int doStartTag() throws JspException{
    if(this.functionModule == null){
        throw new JspTagException("FunctionModuleTag requires a function name");
    }

    this.startElement = this.createElement(this.type, this.cssClass);

    this.function = getJCOFunction(this.functionModule);
    this.functionMap.put("Function", this.function);
    this.pageContext.setAttribute("FunctionMap", this.functionMap);

    try{
        JspWriter out = this.pageContext.getOut();
        out.print(this.startElement);
    }catch(Exception e){

    }
    return EVAL_BODY_INCLUDE;
}

public int doEndTag() throws JspException{
    String endElement = this.createEndElement();
    try{
        JspWriter out = this.pageContext.getOut();
        out.print(endElement);
    }catch(Exception e){

    }
    return EVAL_PAGE;
}
private String createElement(String type, String cssClass) throws JspException {
    String startElement = null;
    if(type != null){
        if(type.equals("form"));
        startElement = "<form class=\"" + this.cssClass + "\" name=\"" + this.functionModule+"\" method=\"post\" action=\"callFunctionModule.sap\">";
    if(type.equals("div")){
        startElement = "<div>";
    }
    }else throw new JspTagException("type is a required field in the FunctionModuleTag");
    return startElement;
}

解决这个问题的方法是在functionModule Tag类中设置一个全局变量,该类包含我想输出的html字符串。然后,在字段标记类中,我调用祖先函数模块类并获取对全局变量的访问权。然后我使用字段Tag类中的JspWriter来打印表单元素和表单元素内的任何元素。这将有效,但我想让它以另一种方式工作,其中functionModule标记类输出它的html字符串,然后移动到其他嵌套标记然后它们打印它们的html字符串。

感谢您抽出宝贵时间审核我的问题!

0 个答案:

没有答案