标签: jsp-tags

jsp:在Java中转发而不使用JSP标记?

我可以在<%...%>块中使用与<jsp:forward page ="..."/>等效的纯Java吗?

例如,我目前有一个这样的JSP页面:

<%
    String errorMessage = SomeClass.getInstance().doSomething();
    if (errorMessage != null) {
        session.setAttribute("error", errorMessage);
%>
<jsp:forward page="error.jsp" />
<%
    } else {
        String url = response.encodeRedirectURL("index.jsp");
        response.sendRedirect(url);
    }
%>
Run Code Online (Sandbox Code Playgroud)

必须打破<%...%>块以使用jsp:forward是丑陋的,并且由于缩进等原因使得更难阅读.

那么,我可以在不使用JSP标记的情况下在Java代码中进行转发吗?

这样的事情是理想的:

<%
    String errorMessage = SomeClass.getInstance().doSomething();
    if (errorMessage != null) {
        session.setAttribute("error", errorMessage);
        someObject.forward("error.jsp");
    } else {
        String url = response.encodeRedirectURL("index.jsp");
        response.sendRedirect(url);
    }
%>
Run Code Online (Sandbox Code Playgroud)

java jsp jsp-tags forward

11
推荐指数
2
解决办法
6万
查看次数

JSP标记文件可以访问其调用JSP的PageContext吗?

如果我做:

<% pageContext.setAttribute("foo", "bar"); %>
<custom:myTag/>
Run Code Online (Sandbox Code Playgroud)

好像我应该能做到:

<%= pageContext.getAttribute("foo") %>
Run Code Online (Sandbox Code Playgroud)

在myTag.tag内...但当然我不能,因为标签文件无法访问pageContext(相反它可以访问jspContext ...它与调用页面没有相同的属性pageContext中).

现在,您可以通过ELScript访问pageContext:

${pageContext}
Run Code Online (Sandbox Code Playgroud)

但这没有用,因为ELScript无法传递参数,所以你不能这样做:

${pageContext.getAttribute("foo")}
Run Code Online (Sandbox Code Playgroud)

但是,ELscript可以访问页面上下文的事实,以及标记可以访问各种变量(如jspContext)这一事实,标记必须有一些方法才能访问(以scriptlet/Java逻辑方式,而不仅仅是ELScript)来自调用JSP的pageContext的属性.

在那儿?

java jsp jsp-tags el

11
推荐指数
1
解决办法
2万
查看次数

如何创建使用其他JSP标记的自定义JSP标记?

我想编写一个自定义JSP标记,其输出包括其他JSP标记,这些标记本身也应该被动态评估.但显然我的TagSupport子类所写的所有内容pageContext.getOut()都直接发送给客户端而没有任何进一步的评估.

我觉得这应该很简单,因为它似乎是人们想要使用自定义标签的第一件事:封装和重用其他自定义标签,避免代码重复.

如何使以下代码执行它显然想做的事情?:

public class MyTag extends TagSupport {
    public int doStartTag() throws JspException {
        try {
            pageContext.getOut().println(
              "The output from this tag includes other tags " +
              "like <mypackage:myOtherTag>this one</mypackage:myOtherTag> " +
              "which should themselves be evaluated and rendered."
            )
        } catch (IOException e) {
            throw new JspException(e);
        }
        return SKIP_BODY;
    }   
}
Run Code Online (Sandbox Code Playgroud)

编辑:我的特定用例的一些背景,如果它有帮助.我有一个自定义标签<user>,它以对我的应用程序有用的方式动态呈现用户名(鼠标悬停在名字,姓氏,电话号码等).我现在正在编写另一个<comment>用于显示用户注释的标记,我想使用我现有的<user>标记在<comment>标记的输出中呈现用户名.

jsp jsp-tags

11
推荐指数
2
解决办法
7819
查看次数

子目录中的JSP标记文件,使用单个taglib前缀.那可能吗?

我目前用我的.tag文件声明:

<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
Run Code Online (Sandbox Code Playgroud)

标记文件路径的示例:

/WEB-INF/tags/test.tag
Run Code Online (Sandbox Code Playgroud)

我这样使用它们:

<t:test oneAttributeKey="oneAttributeValue">
   some content...
</t:test>
Run Code Online (Sandbox Code Playgroud)

我的问题:我不想把我的所有标签文件都放在一个文件夹"/ WEB-INF/tags"中.

我宁愿把它们放在不同的子目录中:

/ WEB-INF /标签/用户/

/ WEB-INF /标签/ widgetsA /

/ WEB-INF /标签/ widgetsB /

(......)

这是否可行,而不为每个人和每个人创建不同的taglib前缀

我想避免的例子:

<%@taglib prefix="t_users" tagdir="/WEB-INF/tags/users" %>
<%@taglib prefix="t_widgetsA" tagdir="/WEB-INF/tags/widgetsA" %>
<%@taglib prefix="t_widgetsB" tagdir="/WEB-INF/tags/widgetsB" %>
Run Code Online (Sandbox Code Playgroud)

我希望使用单个"t"前缀的示例:

<t:users/onetag oneAttributeKey="oneAttributeValue">
   some content...
</t:users/onetag>
Run Code Online (Sandbox Code Playgroud)

是否存在类似的解决方案?

更新:BalusC表明,通过在单个.tld中定义所有标记文件,可以只使用一个前缀.我想我的问题还不够明确:我想知道是否可以在多个子目录中使用标记文件,而不必在任何地方指定路径,除非在使用它们的元素中(例如: <T:用户/ onetag")!

我不喜欢JSP标签的是它们的行为与普通的JSP文件非常不同,即使它们实际上共享非常相似的内容.事实上,我甚至决定将所有jsp文件放在/ WEB-INF/tags /文件夹中,因此它们与标记文件并排(我必须选择/ WEB-INF/tags /,因为这文件夹对于标记文件是必需的,由于某种原因)!我不明白为什么我的一些包含HTML的文件会放在/ WEB-INF/jsp /和其他一些/ WEB-INF/tags/!!

我希望能够将jsp和标记文件分组到目录中,具体取决于它们的相关内容!示例:

 /WEB-INF/tags/users/userProfileLayout.tag
 /WEB-INF/tags/users/employeeProfile.jsp
 /WEB-INF/tags/users/employerProfile.jsp

 /WEB-INF/tags/widgetsA/widgetALayout.tag
 /WEB-INF/tags/widgetsA/oldWidgetA.jsp
 /WEB-INF/tags/widgetsA/newWidgetA.jsp
Run Code Online (Sandbox Code Playgroud)

但这迫使我在多个@tablib或.tld中声明每个子目录的路径,我觉得这有点不方便.我会忍受它,但我认为它可以改进.

java jsp jsp-tags taglib

11
推荐指数
1
解决办法
1万
查看次数

当从另一个jsp包含时,<%@ page pageEncoding ="UTF-8"%>被忽略

我有代码(现在在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)

encoding jsp jsp-tags include tomcat7

11
推荐指数
1
解决办法
7万
查看次数

JSP标记递归

我正在为我的一个练习项目实现一个树标记,在那里我将以树的形式(递归地)显示目录的内容.在JSP2.0之前的几天里,我已经在Java中实现了类似于Java的自定义标记.处理目录需要递归(处理子目录)!是否可以将其编码为标记文件,并且可以以递归方式使用它们吗?

recursion jsp-tags

10
推荐指数
1
解决办法
1万
查看次数

在Custom JSP标记中传递Java对象值

我正在尝试从自定义jsp标记传递一个java变量(我在这里使用struts2来从java类中获取变量).这是我得到的错误.

javax.servlet.ServletException: /pages/editBidForm.jsp(51,8) According to TLD or attribute directive in tag file, attribute parentId does not accept any expressions
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
    ....
Run Code Online (Sandbox Code Playgroud)

这是我的jsp页面(部分)

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib uri="/WEB-INF/taglib.tld" prefix="custom" %>
...
...
<table>
           <tr>
           <%

         String bidformoid=null;
         bidFormOid=request.getParameter("bidFormOid");
         %>

            <td> <custom:zorancustomtag  parentType = "BIDFORM" parentId = "<%= pageContext.getAttribute("bidFormOid") %>" /></td>   


           </tr>
        </table>
Run Code Online (Sandbox Code Playgroud)

我无法正确传递parentId参数.我能够正确传递parentType参数,因为它只涉及传递字符串

这是taglib文件.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag 
Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
      <tlibversion>1.0</tlibversion>
      <jspversion>1.1</jspversion>
      <shortname>custom</shortname>
  <tag>
      <name>zorancustomtag</name>
      <tagclass>com.zoran.action.CustomizedTag</tagclass>
      <bodycontent>JSP</bodycontent> …
Run Code Online (Sandbox Code Playgroud)

java jsp jsp-tags

10
推荐指数
1
解决办法
1万
查看次数

如何在Eclipse中的JSP/JSP标签中获取EL(表达式语言)内容辅助(自动完成)?

有没有办法,通过配置,升级或插件来获得JSP EL表达式的内容辅助?

例如

$ { CTRL+ SPACE...

要么

$ {pageContext中.CTRL+ SPACE...

等等...

eclipse jsp jsp-tags el

10
推荐指数
1
解决办法
3064
查看次数

Spring-Security 3.1 java.lang.ClassNotFoundException:org.springframework.security.taglibs.authz.AuthorizeTag

我刚刚从Spring Security 3.0.5升级到3.1.0.RC3

现在,以下JSP代码给了我 java.lang.ClassNotFoundException: org.springframework.security.taglibs.authz.AuthorizeTag

<security:authorize access="not hasRole('ROLE_ANONYMOUS')">
Welcome <%= request.getUserPrincipal().getName() %>
</security:authorize>
Run Code Online (Sandbox Code Playgroud)

我看一下Spring Security Reference Documentation 3.1,看起来<security:authorize>标签应该可行.但是,当我在目录org.springframework.security.taglibs.authz中查看时,我看spring-security-taglibs-3.1.0.RC3.jar不到任何内容AuthorizeTag.class.

这有什么不对?

谢谢!

spring jsp-tags spring-security

10
推荐指数
2
解决办法
7174
查看次数

JSTL日期比较

我在JSTL上看过一些关于日期比较的帖子,但我仍然无法让它发挥作用.

我有一个日期字段,我想测试是否在01-01-1970之后.

<c:if test="${user.BirthDate > whatGoesHere}">
    <doSomeLogic/>
</c:if>
Run Code Online (Sandbox Code Playgroud)

}

也许应该使用豆子?

谢谢 !

jstl jsp-tags java.util.date

10
推荐指数
3
解决办法
3万
查看次数