Установить атрибут запроса в зависимости от нажатой ссылки - PullRequest
3 голосов
/ 29 мая 2011

Я бы хотел определить, по какой ссылке кликают, и соответственно установить атрибут запроса; обрабатываться в контроллере. Контроллер универсален. Он отправит на другую страницу в соответствии с атрибутом, установленным в JSP. Как мне этого добиться?

EDIT:

Я последовал совету BalusC, где

<a href="RandomController/Register">Register</a>
<a href="RandomController/Login">Login</a>

RandomController : 



 @WebServlet(name = "RandomController", urlPatterns = {"/RandomController/*"})
public class RandomController extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
    int theRandom = 0;
    Random myRandom = new Random();
    RequestDispatcher dispatcher = null;

    String pathInfo = request.getPathInfo();
    String contextPath = request.getContextPath();
    String dispatchesPath = contextPath + pathInfo;

    System.out.println(pathInfo);
    System.out.println(contextPath);
    System.out.println(dispatchesPath);

    theRandom = myRandom.nextInt(MAX_RANDOM);
    request.setAttribute("random", theRandom);

    if(pathInfo.equals("/Login")) {
      dispatcher = request.getRequestDispatcher("Login.jsp");
      dispatcher.forward(request, response);
    }
    else {
      dispatcher = request.getRequestDispatcher("Register.jsp");
      dispatcher.forward(request, response);
    }
  }
}

Я пробовал этот подход, но Исключение о максимальной глубине для вложенных диспетчеров запросов: 20 - бросок. Универсальным контроллером является RandomController, сервер которого два производит случайное число и задается в качестве атрибута в объекте запроса и отправляет его на страницу входа или регистрации.

Login.jsp:

<%-- 
    Document   : Register
    Created on : May 28, 2011, 5:49:35 PM
    Author     : nicholas_tse
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Online Store Register Page</title>

     <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
  </head>
  <body>
    <jsp:useBean id="randomBean" class="Helper.RandomInt" 
                 scope="request">
    </jsp:useBean>

    <h1>Online Store</h1>

    <p></p>
    <div align="right">
      <h3>
        <c:if test="${not empty sessionScope.username}">
          ! Welcome ${sessionScope["username"]} !
          <form action="LogoutController" method="POST">
            <input type="submit" name="submit" value="Logout"/>
          </form>
        </c:if>
      </h3>
    </div>

    <ul id="nav_list">
      <li><a href="http://localhost:8080/OnlineStore">Home</a></li>
      <li><a href="Product.jsp">Product</a></li>
      <li><a href="">Add Stock</a></li>

      <li><a href="">Shopping Cart</a></li>
      <li><a href="">Order Status</a></li>
      <li><a href="RandomController/Register">Register</a></li>
      <li><a href="RandomController/Login">Login</a></li>
    </ul>     

    <br></br>
    <p></p>

    <c:if test="${!not empty sessionScope.username}">
      <div id="registerForm" align="center" 
           style="border:1px solid black; width:760px" >

        <form name="RegisterForm" action="RegisterController" 
              method="POST">
          <p>
            Username : <input type="text" id="username" name="username"> 
          <c:if test="${message.msg} != null" > 
            ${message.msg}
          </c:if>
          </p>        

          <p>
            Password : <input type="password" id="password" name="password"
          </p>

          <p>
            Name : <input type="text" id="name" name="name"> 
          <c:if test="${message.msg} != null" > 
            ${message.msg}
          </c:if>
          </p> 

          <p>
            Address : <input type="text" id="address" name="address"> 
          <c:if test="${message.msg} != null" > 
            ${message.msg}
          </c:if>
          </p>

          <p>
            State : 
            <select>
              <option>Selangor</option>
              <option>Kuala Lumpur</option>
              <option>Cyberjaya</option>
              <option>Putrajaya</option>
            </select>
          </p>

          <p></p>

          <input type="submit" name="submit" value="Register">
          <input type="reset" name="clear" value="Clear">

          <p></p>

        </form> 

      </div>
    </c:if>
  </body>
</html>

Ответы [ 3 ]

2 голосов
/ 29 мая 2011

Без дополнительной информации я могу только предложить добавить строку запроса к вашим URL-адресам. Как это:

  <a href="mycontroller.do?action=page1">Page 1</a>

Таким образом, вы можете посмотреть на параметр actiuon в запросе, чтобы определить, что делать в вашем контроллере.

0 голосов
/ 29 мая 2011

Вы реализовали кнопки отправки в формах с атрибутом name, равным submit, и различными атрибутами value. Это должно означать, что запросы будут включать параметр submit в строке запроса или данных формы POST. На стороне сервера вы можете использовать это, чтобы выяснить, какая из кнопок отправки была нажата.

0 голосов
/ 29 мая 2011

Вы можете добавить параметр запроса. Это можно сделать двумя способами, в зависимости от того, есть ли у вашей формы метод POST или GET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...