我正在实现一个自定义标记库,它将根据输入的属性值输出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字符串。
感谢您抽出宝贵时间审核我的问题!