0

我一直在使用 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 值作为字符串。

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

在此处输入图像描述

虽然我想看到类似的东西:

在此处输入图像描述

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

非常感谢

4

3 回答 3

1

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

编辑:正如我之前所说,printf 方法不存在于out对象中,因为它是一个 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>
于 2012-07-23T15:02:20.077 回答
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)));
于 2012-07-23T14:55:35.547 回答
0

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

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

于 2012-07-23T15:02:22.760 回答