1

I am a beginner in web-development.I have used jsp and servlet to my project.I have created two jsp file one the content the values of all user and one that content the value of specific user.How can i connect the tow jsp.Passing the values from one to other pressing a button that will redirect form user list too user.

User List

    <form name="admin_users"  action="${pageContext.request.contextPath}/admin/users" method="GET">
    <ul class="listing">

    <c:forEach var="obj" items="${list}">
        <li>
            <div class="listinfo"> <img src="${pageContext.request.contextPath}/images/imageholder.jpg" alt="" class="listingimage" />
                <div>
                    <table>
                        <tr>
                            <td width="10%" class="label">Nickname</td>
                            <td name="nickname" id="nickname" class="text longfield" value="${nickname}">
                                <c:out value="${obj.nickname}"/>
                            </td>
                        </tr>

                        <tr>
                            <td width="10%" class="label">Email</td>
                            <td name="email" id="email" class="text longfield" value="${email}">
                                <c:out value="${obj.email}"/>
                            </td>
                        </tr>

                        <tr>
                            <td width="10%" class="label">Phone Number</td>
                            <td name="phoneNumber" id="phoneNumber" class="text longfield" value="${phoneNumber}">
                                <c:out value="${obj.phoneNumber}"/>
                            </td>
                        </tr>

                    </table>           

                </div>


            </div>
            <!--            <div class="listingbtns"> <span class="listbuttons"> <a href="#">View Details</a></span> 

                        </div>-->
            <div>
                <button type="button" onclick="viewdeteils()"/>View Details</button>
            </div>

            <div class="clear">&nbsp;</div>
        </li>
    </c:forEach>
</ul>

User profile

<div id="single_item_details">
<form name="admin_user" action="${pageContext.request.contextPath}/admin/users/user" method="GET">
    <div id="leftcolumn">
        <div>
            <img src="${pageContext.request.contextPath}/images/imageholder_detailspage.jpg" alt="" width="220" height="220" class="previewimg" />
        </div>

        <div>
            <button type="button" onclick="alert('activate')">Activete</button>
        </div>


    </div>

    <div id="rightcolumn">
        <table class="table">
            <tr>

                <td width="10%" class="td_attributes">Nickname</td>
                <td name="nickname" id="nickname" class="text longfield" value="${nickname}">
                    <c:out value="${nickname}"/>
                </td>

            </tr>

            <tr>

                <td width="10%" class="td_attributes">Name</td>
                <td name="firstname" id="firstname" class="text longfield" value="${firstname}">
                    <c:out value="${firstname}"/>
                </td>

            </tr>


            <tr>

                <td width="10%" class="td_attributes">Surname</td>
                <td name="surname" id="surname" class="text longfield" value="${surname}">
                    <c:out value="${surname}"/>
                </td>

            </tr>


            <tr>

                <td width="10%" class="td_attributes">Email</td>
                <td name="email" id="email" class="text longfield" value="${email}">
                    <c:out value="${email}"/>
                </td>

            </tr>


            <tr>

                <td width="10%" class="td_attributes">Phone</td>
                <td name="phonenumber" id="phonenumber" class="text longfield" value="${phonenumber}">
                    <c:out value="${phonenumber}"/>
                </td>

            </tr>



            <tr>

                <td width="10%" class="td_attributes">Role</td>
                <td name="role" id="role" class="text longfield" value="${role}">
                </td>
            </tr>


            <tr>

                <td width="10%" class="td_attributes">Active</td>
                <td name="active" id="active" class="text longfield" value="${active}">
                    <c:out value="${active}"/>
                </td>

            </tr>

        </table>

        <div>
            <button type="button" onclick="alert('edit')">Edit</button>
        </div>

    </div>
    <div class="clear">&nbsp;</div>
</form>

Can i have an example on it.So press button view details on user list and redirect to user profile jsp.

psilos
  • 101
  • 1
  • 11

1 Answers1

1

There are two ways that i know of that you can use to do this with.

1: surround with form

You can surround that table in userlist with a form, then have hidden inputs. There's a button for each form, and whatever button the user clicks, is what variables will be sent.

 <c:forEach var="obj" items="${list}" varStatus="count">
 <form action="GetUser" method="get">
            <div class="listinfo"> <img src="${pageContext.request.contextPath}/images/imageholder.jpg" alt="" class="listingimage" />
                <div>
                    <table>
                        <tr>
                            <td width="10%" class="label">Nickname</td>
                            <td id="nickname" class="text longfield">
                               nickname: <c:out value="${obj.nickname}"></c:out>
                            </td>
                        </tr>

                        <tr>
                            <td width="10%" class="label">Email</td>
                            <td id="email" class="text longfield" >
                               email:  <c:out value="${obj.email}"></c:out>
                            </td>
                        </tr>

                        <tr>
                            <td width="10%" class="label">Phone Number</td>
                            <td id="phoneNumber" class="text longfield">
                                <c:out value="${obj.phoneNumber}"></c:out>
                            </td>
                        </tr>

                    </table>           

                </div>


            </div>
                        <input type="hidden" name="nickname" value="${obj.nickname}">
                            <input type="hidden" name="email" value="${obj.email}">
                                <input type="hidden" name="phoneNumber" value="${obj.phoneNumber}">
            <div>
                <button type="submit">View Details</button>
            </div>

            <div class="clear">&nbsp;</div>
        </form>
    </c:forEach>

1: submit via link

The other option is to use an anchor tag with a href attribute that sends the values to your GetUser servlet. Note: this will only work with GET requests. Because GET requests are mapped to your servlet url (check web.xml). POST requests can't do this. Also note: "../" might not be required in your setup. If for example the user is at the url website.com/users/randomName. Then it will be required.

for example:

     <c:forEach var="obj" items="${list}" varStatus="count">

   <a href="../GetUser?nickname="${obj.nickname}"&email="${obj.email}"&phoneNumber="${obj.phoneNumber}">${obj.nickname}</a>

  </c:forEach>

Nice tip on viewing what gets sent: right click on the page and click inspect, if you go on the network heading, here you can see what gets sent to your servlet. It's useful for debugging. enter image description here

The Servlet:

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetUser extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public GetUser() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //get the values submitted to servlet
        String nickName = request.getParameter("nickname");
        String email = request.getParameter("email");
        String number = request.getParameter("phoneNumber");

        //set the values that will be accessed in userprofile
        request.setAttribute("name", nickName);
        request.setAttribute("email", email);
        request.setAttribute("number", number);


      RequestDispatcher rd=request.getRequestDispatcher("Userprofile.jsp");    
      rd.forward(request,response);  


    }

}

To access those variables in the userprofile jsp, simply:

${name}
${email}
${number}

Hope that helps. Feel free to ask anything.

Jonathan Laliberte
  • 2,672
  • 4
  • 19
  • 44
  • Worth mentioning you can also send data without a servlet by using sessions. Set a session variable via JSTL or scriptlet in the JSP then fetch it the same way you access request variables. "${variable}" – Jonathan Laliberte Aug 22 '17 at 14:20