我这样做:
<?php
function displaySomething($list) {
foreach ($list as $item) {
?>
<html code here><?php echo $item["field"] ?><html code again etc>
<?php }
}
?>
然后我用它在我的页面中的不同位置显示不同的列表。
有没有办法用jsp实现这个目标?使用参数创建方法,我可以将html与java结合使用?
<%! %> admits only java code, can't cut in with html code.
答案 0 :(得分:1)
为此,您必须创建一个标记库。
有两种方法可以定义:
通过TagLib
类和taglib描述符 - 繁琐的过程,以及针对您案例的过度杀伤
标记文件 - see here了解如何操作。简而言之 - 您指定将在找到标记时执行的代码片段(使用jsp语法)。不同之处在于您将拥有<c:forEach>
,以及内部 - 标签的引用。
答案 1 :(得分:1)
没有。 PHP被解析,Java被编译成字节码。 PHP有更多的自由,因为执行者总是看到源代码。
但是,您可以将HTML代码定义为字符串文字,并在for-each循环中将其与item.getField().ToString()
一起打印出来。显然请记住,for-for循环中的每个循环都没有什么不同的语法,但你应该已经知道了; - )
答案 2 :(得分:0)
您不能在<%! %>
代码中包含HTML代码。
我知道你知道完全你在寻找什么,但在JSP中使用JSP CUSTOM TAGs的方法类似。
答案 3 :(得分:0)
在/ WEB-INF / tags目录中创建.tag文件,例如myfunction.tag,其中包含以下内容:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ attribute name="list" required="true" type="java.util.Collection" %>
<c:forEach var="item" items="${list}" varStatus="rowCounter">
<html code here>${item.field}<html code again etc>
</c:forEach>
or uglier:
<% Collection list = (Collection)pageContext.getAttribute("list");%>
<% for(Object o: list) { %>
<html code here><%=((MyType)o).getField()%><html code again etc>
<% } %>
然后您可以使用以下代码在任何.jsp页面上使用它:
<%@ taglib prefix="x" tagdir="/WEB-INF/tags" %>
...
<x:myfunction list="${someCollection}"/>