你如何在不同类型的jsp中正确呈现对象列表?比如说,我必须以指定的顺序渲染这些不同的对象.
一种方法可能是使用公共类型变量或instanceof,但这意味着有一个大的switch/if语句来管理它们:
<c:forEach var="o" items="${bigListofObjects}" >
<c:choose>
<c:when test='${o.type=="simple"}' >
<!-- render simple -->
</c:when>
<c:when test='${o.type=="complex"}' >
<!-- render complex -->
</c:when>
<!-- etc etc ... -->
</c:choose>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
我可以为每个类添加一个render()方法,但这意味着将视图与其余代码混合.
如果我想稍后渲染另一种类型会发生什么?我可以用自定义jsp标签做些什么吗?
我现在访问我的Spring应用程序如下:
http://localhost:8080/my-app
Run Code Online (Sandbox Code Playgroud)
在我的JSP中,我想访问我的应用程序根目录,而不是硬编码到主页的超链接<a href="/my-app">.是否有某种变量可以在我的jsps中访问以指向应用程序根目录?谢谢
我正在创建示例 Spring MVC 应用程序。在我的控制器类中,我定义如下:
Map<String, Object> myModel = new HashMap<String, Object>();
myModel.put("now", now);
myModel.put("products", this.productManager.getProducts());
return new ModelAndView("hello", "model", myModel);
Run Code Online (Sandbox Code Playgroud)
当我将以下部分放入 JSP 文件中时,出现javax.el.PropertyNotFoundException异常
<c:forEach items="${model.products}" var="prod">
<c:out value="${prod.description}"/> <i>$<c:out value="${prod.price}"/></i><br><br>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
这是我的完整例外:
javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'description'.
Run Code Online (Sandbox Code Playgroud)
但在我的域中,类private Sting description属性有公共 getter 和 setter。那个Product班级是公共班级。
产品类别:
public class Product implements Serializable {
private String description;
private Double price;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description …Run Code Online (Sandbox Code Playgroud) 关于JSP标签的charset的简单问题.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib tagdir="/WEB-INF/tags" prefix="custom" %>
<custom:mytag> </custom:mytag>
Run Code Online (Sandbox Code Playgroud)
mytag很简单.tag文件位于WEB-INF/tags.eclipse中此文件的charset是UTF-8.由于某种原因,UTF-8符号无法正常显示.
这只影响包括标签,包含的另一个jsp-s显示正常
我正在开发一个Spring Roo应用程序,并在列表(在list.jspx中)中显示对象时,正在获取所引用对象的所有属性。例如:
@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class Employee {
@NotNull
private String empName;
@ManyToOne
private Department department;
}
Run Code Online (Sandbox Code Playgroud)
和部门
@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class Department {
@NotNull
private String deptName;
@NotNull
private String deptLocation;
}
Run Code Online (Sandbox Code Playgroud)
现在,在roo中构建一个Web项目,并添加部门条目和员工条目之后,我在员工列表中得到了一个难看的表。显示部门实体的所有属性,而我的意图是显示部门名称(deptName)。
试图更改list.jspx,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:page="urn:jsptagdir:/WEB-INF/tags/form" xmlns:table="urn:jsptagdir:/WEB-INF/tags/form/fields" version="2.0">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>
<page:list id="pl_com_test_domain_Employee" items="${employees}" z="user-managed">
<table:table data="${employees}" id="l_com_test_domain_Employee" path="/employees" z="user-managed">
<table:column id="c_com_test_domain_Employee_Department" property="department.deptName" z="user-managed"/>
<table:column id="c_com_test_domain_Employee__DeptLocation" property="deptLocation" z="user-managed"/>
</table:table>
</page:list>
Run Code Online (Sandbox Code Playgroud)
错误:
org.springframework.expression.spel.SpelEvaluationException: EL1027E:(pos 4): Indexing into type 'com.test.domain.Employee' is not supported …Run Code Online (Sandbox Code Playgroud) 我一直在谷歌搜索一个答案,它不起作用.
我收到此错误:
org.apache.jasper.JasperException:/WEB-INF/pages/calendarEntry.jsp(第5行,第46列)根据标记文件中的TLD或属性指令,属性var不接受任何表达式
这是我的jsp文件
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<c:set var="eventDate" value="${calendarEntry.date}"/>
<h1 class="page-header">Calendar Event on <fmt:formatDate value="date" var="${eventDate}" /></h1>
Run Code Online (Sandbox Code Playgroud)
错误发生在最后一行.FMT
Web App声明
<web-app version="3.1"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">
Run Code Online (Sandbox Code Playgroud)
Maven Depedencies
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
部署环境 - Tomcat 8
我目前正在迁移Spring MVC Webapp(通过spring-boot将xml-config迁移到java-config,将tomcat迁移到嵌入式tomcat)。
该webapp使用freemarker作为模板引擎和JSP Taglib。现在,当我调用一个freemarker页面时,出现以下错误:
freemarker.ext.jsp.TaglibFactory$TaglibGettingException:
No TLD was found for the "http://www.springframework.org/tags/form" JSP taglib URI. (TLD-s are searched according the JSP 2.2 specification. In development- and embedded-servlet-container setups you may also need the "MetaInfTldSources" and "ClasspathTlds" freemarker.ext.servlet.FreemarkerServlet init-params or the similar system properites.)
Run Code Online (Sandbox Code Playgroud)
freemarker-header.ftl以以下代码段开头:
<#assign form=JspTaglibs["http://www.springframework.org/tags/form"]>
<#assign core=JspTaglibs["http://java.sun.com/jstl/core"]>
<#assign spring=JspTaglibs["http://www.springframework.org/tags"]>
<#assign osc=JspTaglibs["/WEB-INF/osc.tld"]>
Run Code Online (Sandbox Code Playgroud)
我没有找到任何可用的MetaInfTldSources和ClasspathTlds搜索结果。有人解决过这个问题吗?
哈比卜(KR Habib)
我正在使用Spring的MVC和JSP视图.每个JSP页面都有类似的结构 - 标题,内容,页脚,也许是侧边栏等.围绕"最佳实践",人们似乎"包含"页脚和标题,但这意味着每个JSP页面都包含这些"包含"语句,给出一个固定的格式.在我看来,更好的解决方案将涉及嵌套视图,其中基本模板使用适合于相关页面的信息进行扩展.此方法的一个优点是您可以在基本模板中假定默认值,而无需在其他地方重复它们.另一个优点是你可以进一步分离结构和内容("标题"和"页脚"是结构,
似乎没有成为这个在Spring中的MVC级别的任何支持,但它可以在JSP中使用自定义标签来实现的,而事实上,有一个非常笨拙的尝试在这里(这或许可以解释我想要什么比这个问题好,虽然我认为你可以减少干扰).
无论如何,我的问题是 - 这已经作为(流行/标准)标签库存在吗?我很高兴写自定义标签,但我对这些东西(生成网站)的印象是,已经有大量的解决方案,大多数工作都在选择正确的工具(例如Spring).谢谢.
这个表达式标签为我输出了正确的值<%= drug.NonAuthoritative%>
虽然我无法恢复药物的价值.NonAuthoritative用于C标签
<c:if test="${drug.NonAuthoritative}"> <bean:message key="WriteScript.msgNonAuthoritative"></bean:message></c:if>
Run Code Online (Sandbox Code Playgroud)
方法是
public Boolean NonAuthoritative() {
return nonAuthoritative;
}
Run Code Online (Sandbox Code Playgroud) 我在JSP中使用表达式语言(EL).
<c:set var="noOfPages" value="${numItems/itemsPerPage}" />
<fmt:formatNumber var="noOfPagesRounded" value="${noOfPages}" maxFractionDigits="0" />
<c:if test="${(numItems % itemsPerPage) > 0}">
<c:set var="noOfPages" value="${noOfPagesRounded + 1}"/>
</c:if >
Run Code Online (Sandbox Code Playgroud)
如你所见,我正在计算不.需要显示x否的页面.每页的结果.
从第2行开始,这不是一直有效的,即formatNumber标记是我的除法结果的四舍五入,我不想四舍五入.
即73个记录每页20个需要4页,但我得到结果5,因为在第2行它是结果3.65到4的四舍五入但我想要noOfPagesRounded=3.
如何在没有四舍五入的情况下转换float或double估价int?
jsp-tags ×10
jsp ×7
java ×4
spring-mvc ×4
spring ×3
jstl ×2
el ×1
expression ×1
freemarker ×1
java-ee ×1
jspx ×1
maven ×1
spring-boot ×1
spring-roo ×1
tomcat8 ×1