java - 从自定义标签属性传递数组

标签 java jsp jakarta-ee jsp-tags taglib

我试图在自定义标签的属性中传递一个整数数组。这是我到目前为止所做的。

你好.tld

<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>2.1</jsp-version>
    <short-name>helloTag</short-name>
    <uri>/WEB-INF/lib/hello</uri>
    <tag>
        <name>arrayIterator</name>
        <tag-class>bodyContentPkg.ArrayIterator</tag-class>
        <bodycontent>JSP</bodycontent>
        <attribute>
            <name>array</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

数组迭代器.java

package bodyContentPkg;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

    public class ArrayIterator extends BodyTagSupport{
        int count;
        int[] myArray;
        int returnValue;

        public int[] getArray(){
            return myArray;
        }

        public void setArray(int[] myArray){
            this.myArray=myArray;
        }

        @Override
        public int doStartTag() throws JspException {
            count=0;
            return EVAL_BODY_INCLUDE;
        }

        @Override
        public int doAfterBody() throws JspException {
            if(count==myArray.length-1){
                returnValue=SKIP_BODY;
            }
            else{
                returnValue=EVAL_BODY_AGAIN;
                if(count<myArray.length){
                    JspWriter out = pageContext.getOut();
                    try {
                        out.println(myArray[count]);
                    } catch (IOException e) {
                            e.printStackTrace();
                    }
                }
                count++;
            }
            return returnValue;
        }
    }

正文内容.jsp

<%@taglib prefix="cg" uri="/WEB-INF/lib/hello.tld" %>
<%pageContext.setAttribute("myArray", new int[] {1,2,3,4,5,6});%>
<cg:arrayIterator array="${myArray}"></cg:arrayIterator>

当我运行 jsp 文件时,我得到一个空白页面。不知道怎么了。

另一个问题是如何直接从标签属性传递数组,而不必设置 pageContext 的属性并避免编写 scriptlet?谢谢

最佳答案

when i run the jsp file i get a blank page. dont know whats wrong.

您使用的标签没有任何正文内容,因此 doAfterBody()不叫 .将标签更改为如下内容:

<cg:arrayIterator array="${myArray}">&#160;</cg:arrayIterator>

关于java - 从自定义标签属性传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641996/

相关文章:

java - 设置 Android 4+ 的 java 堆大小

java - 无法从 PHP 的 exec 运行 java

java - 如何更改 Gradle IntelliJ 项目中的依赖关系?

jsp - 如何从 servlet 设置 JSP UseBean 值

jakarta-ee - 在@MappedSuperclass 中定义@UniqueConstraint

java - 有没有办法将 ArrayIndexOutOfBoundsException 导致值替换为某个默认值?

java - 如何知道我使用的是哪个 servlet 和 JSP 版本?

java - 如何在运行时将JS文件包含到所有JSP页面中?

java - Alfresco 问题,residual=true 且 "property type"为空,而 "value type"已填充

java - JNDI 查找时无法对 com.ibm.ws.naming.urlns.genericURLContextFactory 类型的对象调用方法 getObjectInstance