Пользовательские теги JSP фиксируют ввод пользователя

Как один снимок использует ввод из html-формы и отображает его на другой странице jsp, используя пользовательский тег jsp? простой, как следующий?


Страница JSP

<%@ taglib uri="/myTLD" prefix="mytag"%>
<html>
  <title>My Custom Tags</title>
  <body>
    <form method="post" action="index.jsp">
    Insert you first name <br />
    <input type="text" name="username" />
    <input type="submit" value="Done" />
    </form>   
     <mytag:hello username="${param['username']}"/>
  </body>
</html>

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
 PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <display-name>Hello</display-name>
<taglib>
     <taglib-uri>/myTLD</taglib-uri>
     <taglib-location>/WEB-INF/tld/taglib.tld</taglib-location>
    </taglib>
</web-app>

Файл TLD

<?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>
<jsp-version>1.1</jsp-version>
<tlibversion>1.0</tlibversion>
<shortname></shortname>
<tag>
    <name>hello</name>
    <tag-class>com.jjolt.HelloTag</tag-class>
    <attribute>  
       <name>username</name>  
       <required>true</required>  
       <rtexprvalue>true</rtexprvalue>  
    </attribute>
</tag>
</taglib>

Java-класс

package com.jjolt;

import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class HelloTag extends BodyTagSupport 
{
  private String[] username=null;
  public int doStartTag()
  {
    username = (String[]) pageContext.getAttribute("username");
    return EVAL_BODY_INCLUDE;
  }
  public int doEndTag() throws JspException 
  {
    JspWriter out = pageContext.getOut();
    try 
    {
        out.println("Hello "+username[0]);
    } 
    catch (Exception e) 
    {
    }
     return SKIP_BODY;
  }
}

1 ответ

Я думаю, что вы неправильно поняли, как работают пользовательские теги, вам сначала нужно отправить форму, только после этого вы сможете получить доступ к содержимому полей ввода пользователя.

Так что для вашего примера вы должны иметь это:

form.jsp

<%@ taglib uri="/myTLD" prefix="mytag"%>
<html>
  <title>My Custom Tags</title>
  <body>
    <form method="post" action="index.jsp">
    Insert you first name <br />
    <input type="text" name="username" />
    <input type="submit" value="Done" />
    </form>  
    <!-- removed tag from here -->
  </body>
</html>

index.jsp

<%@ taglib uri="/myTLD" prefix="mytag"%>
<html>
  <title>My Custom Tags Result</title>
  <body>
    <mytag:hello username="${param['username']}"/>
  </body>
</html>

И это должно работать сейчас.

Другие вопросы по тегам