我想request.getContextPath()在扩展的JSP标记内部调用SimpleTagSupport,有什么方法可以做到吗?
因此,根据Sun的J2EE文档(http://docs.sun.com/app/docs/doc/819-3669/bnani?l=en&a=view),"如果不需要标记属性,标记处理程序应该提供默认值."
我的问题是如何根据文档的描述定义默认值.这是代码:
<%@ attribute name="visible" required="false" type="java.lang.Boolean" %>
<c:if test="${visible}">
My Tag Contents Here
</c:if>
Run Code Online (Sandbox Code Playgroud)
显然,这个标签不会编译,因为它缺少tag指令和核心库导入.我的观点是,我希望"visible"属性默认为TRUE."标签属性不是必需的",因此"标签处理程序应提供默认值".我想提供一个默认值,所以我错过了什么?
任何帮助是极大的赞赏.
我似乎记得读过可以声明taglib指令,例如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Run Code Online (Sandbox Code Playgroud)
在web.xml中.这消除了在使用taglib的每个JSP文件中复制此指令的需要.有人能告诉我如何将这些指令添加到web.xml中吗?
目前我需要spring bean的jsp 2.0标签使用此代码:
ac = WebApplicationContextUtils.getWebApplicationContext( servletContext);
ac.getBeansOfType(MyRequestedClass.class);
Run Code Online (Sandbox Code Playgroud)
我刚刚得到第一个匹配的bean.
这段代码运行正常,但是有一个不希望出现的缺点,我花了大约一半的页面渲染时间来查找spring bean,因为每次调用一个标签时都会发生这种情况.我想也许可以将bean放入应用程序范围或至少是会话范围.但是,处理这个问题的最聪明方法是什么?
我有一个使用标签模板的页面.我的web.xml非常基础.
我只想在页面中运行一些代码.
不,我对标签或其他替代品不感兴趣.我想使用坏练习scriptlet哈哈.
到目前为止,我收到此"HTTP ERROR 500"错误:
Scripting elements ( %!, jsp:declaration, %=, jsp:expression, %, jsp:scriptlet ) are disallowed here.
Run Code Online (Sandbox Code Playgroud)
虽然我的文件看起来像:
/WEB-INF/web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)
/WEB-INF/tags/wrapper.tag
<%@tag description="Simple Wrapper Tag" pageEncoding="UTF-8"%>
<%@ attribute name="title" required="true" type="java.lang.String"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>${title}</title>
</head>
<body>
<jsp:doBody />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
的index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags"%>
<t:wrapper>
<jsp:attribute name="title">My nice title</jsp:attribute>
<jsp:body>
<h1><%="some code generated …Run Code Online (Sandbox Code Playgroud) 是否有任何理由不允许将scriptlet或EL表达式作为属性值插入?
假设我们有标签:
<tag>
<name>mytag</name>
<tag-class>org.apache.beehive.netui.tags.tree.Tree</tag-class>
<attribute>
<name>attr</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<type>boolean</type>
</attribute>
</tag>
Run Code Online (Sandbox Code Playgroud)
什么可能是一个拒绝下面的好理由?
<my:mytag attr="${setting}" />
Run Code Online (Sandbox Code Playgroud) 我如何为具有2个属性的自定义标签编写(只是一个模板),这些属性允许我使用jstl标记逻辑输出html片段(html表),可以从我的jsp调用.
这可以在不编写java类的情况下完成,这是我在所有示例中看到的.
我想要实现的是将我的JSP中重复的JSTL逻辑外部化为自定义标记,然后使用属性在运行时传递标记所需的动态值.
谢谢,
我刚刚在我的代码中引入了一个错误,因为我似乎误解了jsp标签的生命周期.
标签在错误之前就像这样工作:我将标签作为属性传递给某个集合,并将其显示为表格.该集合从控制器传递到JSP.
错误之后:我删除了设置集合的属性.相反,在标记中我检查集合是否为null,然后从请求中按名称获取它(使用命名约定).
我没想到的事情:收集最初在标签中设置后,在后续执行中永远不会变为空!它仍被定义为TLD中的非要求属性.
我希望标签不会保留执行之间的先前值.
我正在尝试制作一组封装表单元素的自定义标记(标记和验证).
有一种方法可以轻松检索"Out"对象:
JspWriter out = getJspContext().getOut();
Run Code Online (Sandbox Code Playgroud)
但是我无法弄清楚如何获取请求对象.我希望能够从Tag类中直接访问提交的表单值,以便我可以验证每个字段.
该文件是相当稀疏,所以我想也许我可以使用的JspContext对象以某种方式获得请求属性.但我不明白不同的范围.
System.out.println(getJspContext().findAttribute("field1"));
Run Code Online (Sandbox Code Playgroud)
总是打印"null".
Enumeration e = getJspContext().getAttributeNamesInScope(1);
Run Code Online (Sandbox Code Playgroud)
循环并打印出枚举只是给我一个不存在的类列表:
javax.servlet.jsp.jspOut
javax.servlet.jsp.jspPage
javax.servlet.jsp.jspSession
javax.servlet.jsp.jspApplication
javax.servlet.jsp.jspPageContext
javax.servlet.jsp.jspConfig
javax.servlet.jsp.jspResponse
javax.servlet.jsp.jspRequest
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
如果没有,有人可以指向我处理表单显示和验证的标签库吗?我在互联网上搜索了几个小时,似乎每一个都停止了,我无法下载它们.无论是那个或建议一个更好的替代处理表格.
编辑:标签扩展了SimpleTagSupport类.
我有代码(现在在github中),如:
my.jsp(一个通用的jsp - 所有我的jspS或多或少都遵循这个模式):
<%@ include file="include/top.jsp" %>
<title>THE TITLE</title>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="include/head.jsp" %>
<%@ include file="include/no_menu.jsp" %>
CONTENT
<%@ include file="include/bottom.jsp" %>
Run Code Online (Sandbox Code Playgroud)
其中:
top.jsp:
<%@ page session="false"%>
<%@ include file="tag_libs.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)
head.jsp:
<link href="${pageContext.request.contextPath}/css/twoColFixLtHdr.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="container"><!-- closes in bottom -->
<div class="header"><!-- closes in menu -->
<p>
<a href="home"> …Run Code Online (Sandbox Code Playgroud)