繁体   English   中英

为什么JSP out.print()函数无法正常工作

[英]Why isn't JSP out.print() function working properly

我一直在使用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。

但是,不幸的是,这出现了:

在此处输入图片说明

虽然我希望看到以下内容:

在此处输入图片说明

我的out.print()函数调用肯定存在错误...但是怎么了?

非常感谢

您不需要“ $”格式的字符串。 如您所知,使用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>

如果要像在Servlet中一样使用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>

尽我所能尝试一下:

        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)));

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM