如何使用JSP替换HTML表格行颜色?
我的CSS看起来像:
tr.odd {background-color: #EEDDEE}
tr.even {background-color: #EEEEDD}
Run Code Online (Sandbox Code Playgroud)
我想用来<c:forEach>
迭代一个集合.
<c:forEach items="${element}" var="myCollection">
<tr>
<td><c:out value="${element.field}"/></td>
...
</tr>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
我需要一个int count变量或boolean odd/even变量来跟踪行.然后我的<tr>
标签看起来像:
<tr class="odd or even depending on the row">
Run Code Online (Sandbox Code Playgroud) 我services
在JSP页面中调用了一个List变量.如果列表中有多个元素,我需要在页面中添加一些标记.
我想做的是......
<c:if test="${services.size() gt 1}">
<!-- markup... -->
</c:if>
Run Code Online (Sandbox Code Playgroud)
但是你不能在EL中调用Java对象的方法(我想这可能是364823782时间,我后悔这个事实).您只能通过删除具有getName()方法的User类的'get',例如$ {user.name}来访问Java对象上的getter.
评估此测试的正确方法是什么?
我收到了javax.servlet.jsp.JspException
我的网站试图渲染的一个jsp文件(survey.jsp
).但是,堆栈跟踪没有给出jsp中失败的特定行,而是它在(survey_jsp.java:787
)中失败的行号,它似乎是已编译的JSP文件.我在哪里可以找到这样的文件,以便我知道抛出此异常的行是什么?
谢谢
编辑:/work
如果你正在使用tomcat,这些文件存在于目录中,如下面的评论所示.
我必须访问在迭代器中计算的JSTL变量.
代码摘录:
<c:forEach var="resultBean" items="${resultList}" varStatus="status">
card: ${resultBean.cardNum}
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
我想访问${resultBean.cardNum}
scriptlet代码.我现在正在做的是:
<c:forEach var="resultBean" items="${resultList}" varStatus="status">
card: ${resultBean.cardNum}
<c:set var="currentCardNum">${resultBean.cardNum}</c:set>
<%out.write( StringUtils.mask( (String)pageContext.getAttribute("currentCardNum") ) );%>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
我想跳过第3行,我在pageContext中设置变量.没有设置它可以实现相同的结果吗?或者我可以使用其他方式吗?
我有以下JSP:
<%@ page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ page isELIgnored="false"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><c:out value="${it.title}"/></title>
</head>
<body>
<c:forEach var="speaker" items="${it.speakers}" varStatus="stat">
<ul>
<li><c:out value="${speaker.person.firstName}" /> <c:out value="${speaker.person.lastName}" />, <c:out value="${speaker.person.address.city.zip}" /> <c:out value="${speaker.person.address.city.name}" /></li>
</ul>
</c:forEach>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Eclipse在我的代码中警告我关于EL表达式的每个实例:
Warning [line 10]: "value" does not support runtime expressions
Warning [line 13]: "items" does not support runtime expressions
...
Run Code Online (Sandbox Code Playgroud)
但事实并非如此,EL会被服务器正确评估.
任何人都可以向我暗示正确的方向为什么eclipse会警告我那些EL表达式?
我有这个特殊字符的奇怪问题.在JSP中,我使用字段名称作为id,名称可以是任何类似的
id="&lt;1 and &>2" (OR)
id="aaa & bbb"
Run Code Online (Sandbox Code Playgroud)
我没有任何其他选项来使用ID而不是名称,这是我从后端得到的唯一东西.
那么,是否有任何逻辑可以使用JSTL删除所有特殊字符.在目前的场景中,在In JS中,我将使用ID进行一些操作.这导致每种浏览器出现很多问题.
请建议,提前致谢...
我在welcome.jsp上有这个
<c:set var="pgTitle" value="Welcome"/>
<jsp:include page="/jsp/inc/head.jsp" />
Run Code Online (Sandbox Code Playgroud)
这在head.jsp中:
<title>Site Name - ${pgTitle}</title>
Run Code Online (Sandbox Code Playgroud)
但变量是空白的,输出仅仅是
Site Name -
Run Code Online (Sandbox Code Playgroud)
我看过很多文章,我无法弄清问题是什么.如果我${pgTitle}
在同一个welcome.jsp中的其他地方回显,那么它输出正常.
我在两个页面上都包含了核心标记库.
我有一个类定义各种会话属性的名称,例如
class Constants {
public static final String ATTR_CURRENT_USER = "current.user";
}
Run Code Online (Sandbox Code Playgroud)
我想在JSP中使用这些常量来测试这些属性的存在,例如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="com.example.Constants" %>
<c:if test="${sessionScope[Constants.ATTR_CURRENT_USER] eq null}">
<%-- Do somthing --%>
</c:if>
Run Code Online (Sandbox Code Playgroud)
但我似乎无法使sytax正确.另外,为了避免在多个地方重复上面相当冗长的测试,我想将结果分配给本地(页面范围)变量,并改为引用它.我相信我可以这样做<c:set>
,但我再次努力找到正确的语法.
更新:继续下面的建议,我试过:
<c:set var="nullUser" scope="session"
value="${sessionScope[Constants.ATTR_CURRENT_USER] eq null}" />
Run Code Online (Sandbox Code Playgroud)
这没用.所以相反,我尝试替换常量的字面值.我还将常量添加到页面的内容中,因此我可以在呈现页面时验证常量的值
<c:set var="nullUser" scope="session"
value="${sessionScope['current.user'] eq null}" />
<%= "Constant value: " + WebHelper.ATTR_CURRENT_PARTNER %>
Run Code Online (Sandbox Code Playgroud)
这工作正常,它在页面上打印了期望值"current.user".我无法解释为什么使用String文字工作,但是当两个看起来具有相同的值时,对常量的引用不会.救命.....
我有一个豆子${product}
.我想查看这个bean的所有可用字段/属性.因此,例如,${product.price}
,${product.name}
,${product.attributes.colour}
等.
是否可以使用JSTL/EL在JSP中动态打印出这些属性的所有名称和值?
就像是:
<c:forEach items="${product}" var="p">
${p.key} - ${p.value}
</c:forEach>
Run Code Online (Sandbox Code Playgroud) 我使用sitemesh来装饰页面.我正在使用JSP页面.页面工作正常,直到我使用<c:if>
条件标签.我在WEB-INF/lib文件夹中有jstl-impl-1.2.jar和sitemesh-3.0-alpha-1.jar文件.我在jsp页面中有以下标记库声明:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
Run Code Online (Sandbox Code Playgroud)
我正在使用带有java 6的tomcat 7.0.当我在eclipse中创建新的动态Web项目时,我将动态Web模块版本设置为2.4.页面有<c:set/>
标签,它们工作正常,但是当我使用if条件标签时,我收到以下错误:
javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:342)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.java:158)
org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.java:133)
org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.java:39)
org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.java:74)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.java:175)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.java:126)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.java:157)
root cause
java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(Unknown Source)
java.lang.ClassLoader.defineClass(Unknown Source)
java.security.SecureClassLoader.defineClass(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1223)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1450)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.java:158)
org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.java:133)
org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.java:39)
org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.java:74)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.java:175)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.java:126)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.java:157)
root cause
java.lang.ClassNotFoundException: …
Run Code Online (Sandbox Code Playgroud)