显示标记出错

时间:2012-12-31 09:49:54

标签: jsp displaytag

我有一个具有以下属性的对象列表

公共类ViewTestCasesBean {

private String testcaseName;
private String subject;
private String description;
private List<TestCaseDetailsBean> testList = new ArrayList<TestCaseDetailsBean>();

// GETTERS AND SETTERS SECTION.......///////

public String getTestcaseName() {
    return testcaseName;
}

public void setTestcaseName(String testcaseName) {
    this.testcaseName = testcaseName;
}

public String getSubject() {
    return subject;
}

public void setSubject(String subject) {
    this.subject = subject;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public List<TestCaseDetailsBean> getTestList() {
    return testList;
}

public void setTestList(List<TestCaseDetailsBean> testList) {
    this.testList = testList;
}

}

现在我的行​​动代码是......

   public String execute() {


    detailsList = viewTestCasesTransaction.fetchTestCases();
    session.put("testcaseList", detailsList);

    if (detailsList.size() > 0) {

        return SUCCESS;
    }
    return ERROR;
}

此处,detailsList是要在显示标记中显示的上述对象的列表。

我尝试了以下

 <jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="urn:jsptld:http://java.sun.com/jstl/core">
<%@page import="org.apache.jasper.tagplugins.jstl.core.Import"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.*"%>
<%@ page import="com.harmony.cloud.bean.TestCaseDetailsBean"%>
<%@ page import="com.harmony.cloud.action.ViewTestCasesAction"%>

<%@ page import="java.sql.*"%>
<%@ page isELIgnored="false"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>

<html>
   <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

 <title>Test Cases List</title>


  </head>
   <body>
<%session.getAttribute("testcaseList"); %>
<display:table name="detailsList" id="parent">
    <display:column property="testcaseName" />
    <display:column property="subject" />
    <display:column property="description" title="Comments" />

    <c:set var="nestedName"
        value="detailsList[${parent_rowNum -1}].testcaseList}" />
 <display:table  name="${nestedName}" id="child${parent_rowNum}" >
    <display:column title="Steps">
</display:table>
</display:column>

  <display:setProperty name="paging.banner.placement" value="top" />

        </display:table>

  </body>
</html>

但是得到了以下错误.........

org.apache.jasper.JasperException:/ testCasesView.jsp(line:3,column:3)元素的内容必须由格式良好的字符数据或标记组成。     org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)     org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:408)     org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:89)     org.apache.jasper.compiler.JspDocumentParser.parse(JspDocumentParser.java:207)     org.apache.jasper.compiler.ParserController.doParse(ParserController.java:226)     org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:119)     org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:193)     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:646)     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)     org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)     javax.servlet.http.HttpServlet.service(HttpServlet.java:728)     org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)     org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)     org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)     org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)     org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)     org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)     org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164)     org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)     com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:374)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)     org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)     com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)     org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)     com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)     com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)     com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)     com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)     com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)     org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)     org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511)     org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:432)     org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)     org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)     org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)     org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)     org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)     org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)     org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)     org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)     org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)       org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)       org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)     org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)     java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(未知来源)     java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源)     java.lang.Thread.run(未知来源)

编码有什么问题?

2 个答案:

答案 0 :(得分:0)

注意以下要素:

1)<jsp:root ...>没有结束标记

2)值表达式还有大括号和类属性testcaseList不存在<c:set var="nestedName" value="detailsList[${parent_rowNum -1}].testcaseList}" />,因此将其更改为<c:set var="nestedName" value="detailsList[${parent_rowNum -1}].testList" />

3)显示:嵌套表的列标记缺少property属性<display:column title="Steps">

4)将doctype放在文件<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

的第一行

5)这只是一个问题,你正在检索会话属性但没有分配它。是故意这样做的吗?

displaytag-examples-1.2.war中的示例 - &gt; example-nestedtables.jsp

答案 1 :(得分:0)

如果您正在使用Eclipse IDE,那么在创建JSP时,请在向导之后创建带有html标记或xhtml标记的JSP。您不希望使用JSP 2.0特定标记xhtml标记创建JSP。 项目 - &gt;新的 - &gt; JSP文件 - &gt; check使用JSP模板 - &gt;带有xhtml / html标记的新JSP文件。