为什么JSP out.print()函数没有正常工作

时间:2012-07-23 14:47:26

标签: java html jsp printing

我一直在使用JSP + Java + Html,并且在for循环中我遇到了out.print()函数的问题。 我的函数getGeneAvailableTaxonomies()返回一个整数列表(类型为List<Integer>),我想在界面中打印这些数字。

这是我的代码:

 for(Integer i : ApplicationExtender.getApplicationExtender(application).getGeneAvailableTaxonomies()) 
        {
          out.print(String.format("<option value=\"%1$d\">%2$s</option>", i, TaxonId.getOrganismFromId(i)));
        }

doce %1$d应该代表i整数值,而%2$s代表另一个参数,分类id值代表String。

但不幸的是,这就是出现的情况:

enter image description here

虽然我希望看到类似的内容:

enter image description here

我的out.print()函数调用肯定有错误......但是出了什么问题?

非常感谢

3 个答案:

答案 0 :(得分:1)

您的格式字符串中不需要“$”。您可能知道,使用scriptlet不是进行Java Web开发的好方法。我认为使用JSTL要好得多,因为你不会在JSP中将Java代码与标记混合在一起。

编辑:正如我前面所说的那样, out 对象中没有printf方法,因为它是一个JspWriter而JspWriter不是从PrintWriter继承的(有printf)。抱歉。所以,试试这个(它对我有用)。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <select>
            <%
                String[] strings = new String[]{ "aaa", "bbb", "ccc", "ddd" };

                for ( int i = 0; i < strings.length; i++ ) {
                    out.print( String.format( "<option value='%d'>%s</option>", i, strings[i] ) );
                }
            %>
        </select>
    </body>
</html>

如果你想在Servlets中使用PrintWriter,那么这将起作用:

<%@page import="java.io.PrintWriter"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <select>
            <%
                PrintWriter writer = new PrintWriter( out );
                String[] strings = new String[]{ "aaa", "bbb", "ccc", "ddd" };

                for ( int i = 0; i < strings.length; i++ ) {
                    writer.printf( "<option value='%d'>%s</option>", i, strings[i] );
                }
            %>
        </select>
    </body>
</html>

答案 1 :(得分:0)

尽我所知,试试这个:

        String option = "<option value=\""+d+"\">"+s+"</option>";    
        out.print(option);

使用String.format

out.print(String.format("<option value=\"%d\">%s</option>", i, TaxonId.getOrganismFromId(i)));

<强>更新 正如您在评论中提到的那样,TaxonID.getOrganismFromId(i)正在返回int,因此您的原始代码%2$s只有一次更改为%2$d即可...

out.print(String.format("<option value=\"%1$d\">%2$d</option>", i, TaxonId.getOrganismFromId(i)));

答案 2 :(得分:0)

我在http://ideone.com/u8fDT上运行时,print / format代码似乎没问题。您可能只需要重新编译JSP(应该可能会自动发生,但有时可能需要重新启动服务器)。

此外,混合HTML和Java代码是一种非常痛苦的工作方式。 JSTL或像FreeMarker这样的模板系统会让您的生活更轻松。