我一直在使用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()函数调用肯定有错误......但是出了什么问题?
非常感谢
答案 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这样的模板系统会让您的生活更轻松。