为什么void方法无法在jsp中打印scriptlet和表达式标签内部

时间:2018-03-10 03:10:34

标签: jsp jsp-tags


当我尝试使用声明标签打印返回int的方法时,通常使用scriplets和expression标签可以打印该方法。

        <%! int print(int i, int j, int k) {
                return i + j + k;
        }%>

        <%= print(10, 20, 30)%> 
        <% out.print(print(10, 20, 300));%>

但是当我尝试使用相同的标签打印void返回方法时,我收到编译错误。

    <%! void print(int i, int j, int k) {
            System.out.print(i + j + k);
        }%>

    <%= print(10, 20, 30)%> 
    <% print(10, 20, 300);%>

...

C:\Users\dilin\Documents\NetBeansProjects\Practice\build\generated\src\org\apache\jsp\index_jsp.java:60: error: 'void' type not allowed here
  out.print( print(10, 20, 30));
                  ^1 error

这是因为void方法不能作为打印输出吗?


我是网络开发的新手。所以请耐心等待。谢谢。

2 个答案:

答案 0 :(得分:0)

当你写out.print()时,它期望一些返回值。但是你的方法写成无效。这就是为什么它会给你错误

答案 1 :(得分:0)

这很简单。在您的scriptlet中,您在没有参数的情况下调用java.io.PrintStream#print方法。因此,编译器会给您一个错误。

请参阅Java docs。虽然print中有PrintStream方法的几个重载变体,但它们都不是无参数重载。您的自定义print方法返回void,因此您无法将其传递给接受参数的方法。

在旁注中,强烈建议不要使用scriptlet,因为它们可能会使您的应用程序容易受到安全威胁。