Problem der Parameterübergabe aus Iframe

Status
Nicht offen für weitere Antworten.

Phenix

Bekanntes Mitglied
Hallo, ich habe ein (zumindest für mich) kniffliges Problem, auf dessen Lösung ich nicht komme.
Also ich habe in einer JSP (SearchEmployee.jsp) ein Scriptlet, das mir alle Mitarbeiter ausgibt(mithilfe eines Gateways und einer Bean), die zu einem gesuchten Kriterium passen. Die Ergebnisse sollen in einem Iframe ausgegeben werden, da somit ein Scrollen möglich ist, ohne das Design zu verhunzen.
Hinter jedem gefundenen Mitarbeiter soll ein Radiobutton erscheinen, der nach anwahl und zusätzlichem drücken eines submit-buttons eine EmployeeBean an ein weiteres Servlet übergibt. Diese EmployeeBean soll allerdings die Bean sein, zu der halt der entsprechende Radiobutton gehört. Etwas doof zu erklären. Vielleicht ist der Code ja halbwegs selbsterklärend. Ich denke, man muss das mit nem requestDispatcher lösen, allerdings habe ich nicht ganz verstanden, wie ich diesen Einsetze:
HTML:
<!--- Code der SearchEmployee.jsp -->

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="nl.fontys.prj22.gateway.EmployeeGateway"%>
<%@page import="nl.fontys.prj22.bean.EmployeeBean"%>
<%@page import="java.util.*"%>
<%@page import="nl.fontys.prj22.predefine.DesignMenu" %>
<%@page import="nl.fontys.prj22.interfaces.Links" %>
<%@page import="nl.fontys.prj22.interfaces.Abstract" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%!
ArrayList<EmployeeBean> list=new ArrayList<EmployeeBean>();
%>

<%

String message="<br>";
if(request.getParameter("name")!=null){
    message += "Suchergebnis:<br>";
    EmployeeGateway gateway = new EmployeeGateway();
    list = gateway.searchBy(request.getParameter("attribute"),request.getParameter("name"),request.getParameter("order"));
    for (int i = 0; i < list.size(); i++) {
    message += list.get(i).getFirstname()+" "+list.get(i).getName()+" ("+list.get(i).getGender()+")<br>"
            +list.get(i).getBirthday()+"."+list.get(i).getBirthmonth()+"."+list.get(i).getBirthyear()+"<br>"
            +list.get(i).getStreet()+" "+list.get(i).getHousenumber()+" - "+list.get(i).getZip()+" "+list.get(i).getCity()+"<br>"
            +"Arbeitsbeginn: "+list.get(i).getStartday()+"."+list.get(i).getStartmonth()+"."+list.get(i).getStartyear()+"<br>"
            +list.get(i).getRank()+": "+list.get(i).getWorkshift()+"<br>"
            +"|"+list.get(i).getComment()+"|<br> <form action=\"SearchResults.jsp\">"+
            "<input type=\"radio\" name=\"searchlist\" value=\""+i+"\"></form><br>"
            +"________________________________________<br><br>";
    }
    session.setAttribute("searchResult", message);
}
%>


        <%=DesignMenu.printHtmlHead()%>
        <%=DesignMenu.printInnerMenue()%>
        <%=DesignMenu.printLogo()%>
        <%=DesignMenu.printDate()%>
     <div id="Content">
     <form method="post" action="SearchEmployee.jsp">
     <input type="text" name="name" value=""><input type="submit" value="Suche"><br>
         search by:<br>
     <input type="radio" name="attribute" value="EMP_LASTNAME" checked>Nachname <br>  
     <input type="radio" name="attribute" value="EMP_FIRSTNAME">Vorname <br>
     <input type="radio" name="attribute" value="EMP_RANK">Arbeitsstatus <br>  
     <input type="radio" name="attribute" value="EMP_WORKSHIFT">Arbeitszeit<br>
         order by:<br>
     <input type="radio" name="order" value="EMP_LASTNAME" checked>Nachname <br>  
     <input type="radio" name="order" value="EMP_FIRSTNAME">Vorname <br>
     <%-- <input type="radio" name="order" value="EMP_RANK">Arbeitsstatus <br>  
     <input type="radio" name="order" value="EMP_WORKSHIFT">Arbeitszeit<br> --%>
     </form>
     <br>

         <! --- Hier soll der Button hin. Der Teil ist nicht vollständig -->
         <% if(!list.isEmpty()){
            //EmployeeBean emb=list.get(Integer.parseInt(request.getParameter("searchlist")));
            String s=request.getParameter("searchlist");
            session.setAttribute("employee", s);
            }
          %>
             
         <iframe scrolling="auto" height="520px" width="800px" frameborder="0" src="<%=Links.SEARCHRESULTS%>"/>
         <br>


     </div>
    </body>
</html> 




<! --- Hier sollen die Ergebnisse angezeigt werden -->

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="nl.fontys.prj22.gateway.EmployeeGateway"%>
<%@page import="nl.fontys.prj22.bean.EmployeeBean"%>
<%@page import="java.util.*"%>
<%@page import="nl.fontys.prj22.predefine.DesignMenu" %>
<%@page import="nl.fontys.prj22.interfaces.Links" %>
<%@page import="nl.fontys.prj22.interfaces.Abstract" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<%=DesignMenu.printHtmlHead()%>

        <%=session.getAttribute("searchResult")%>

    </body>
</html>
 
Zuletzt bearbeitet von einem Moderator:

Phenix

Bekanntes Mitglied
Keiner ne Idee oder habe ich das Problem nicht genau genug geschildert? Wäre für jede Hilfe dankbar
 

HLX

Top Contributor
Zunächst mal hast du keine Code-Tags verwendet, so dass dein ganzer Code durch die fehlende Formatierung unleserlich ist. Dann verwendest du Scriptlets anstelle von JSP- bzw. JSTL-Tags und das auch noch recht chaotisch. Da macht das Lesen deines Post wirklich keine Freude.

Was mir auf jeden Fall schonmal auffällt: Du brauchst, so wie es aussieht nicht mehrere, sondern nur ein einizges Formular. Jeder Radiobutton hat den gleichen Namen aber einen unterschiedlichen Wert. So kannst du nach dem Absenden des Formulars den angeklickten Wert über request.getParameter("buttonName") herausfinden und deine Bean zuordnen.
 

Phenix

Bekanntes Mitglied
Jep, genau so war das auch gedacht. Das Problem ist, wie komme ich in der Parent-Seite auf die Werte des ausgewählten Radiobuttons in dem iframe?

Sorry für die unleserlichkeit. Der Code wurde von 2 Leuten zusammengeschustert und ich habe das dann übernommen und hier reingeschrieben.
Wie mach ich denn das highlighting hier an? Iwie überseh ich das scheinbar.

Danke schonmal
 

HLX

Top Contributor
Ich kann in dem Chaos keinen Workflow erkennen, da du alles in einer JSP-Datei abfackelst. Möglicherweise gibt es ein Problem mit der Reihenfolge.

Du solltest unbedingt die Logik in ein Servlet auslagern. Der Submit-Aufruf des Formulars spricht dabei dieses Servlet an. Hier werden zunächst die Ergebnisse als Session-Attribut gesetzt. Anschließend verweist du per RequestDispatcher wieder auf die JSP-Seite. Dann sollte die JSP-Datei aus dem IFrame auf die gespeicherten Ergebnisse zugreifen können.
 

Phenix

Bekanntes Mitglied
Also ich habe die Logik jetzt in ein separates Servlet kopiert und zwar in die ProcessRequest Methode. Man kommt also zuerst auf die SearchEmployee.jsp. Das form dort schickt dann die daten an das Servlet. Dieses sollte das dann verarbeiten hoffe ich und die Daten sollen dann in dem Ifram angezeigt werden.

Habs so versucht, funzt aber leider nicht:

Java:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        ArrayList<EmployeeBean> list = new ArrayList<EmployeeBean>();
        String message = "<br>";
        if (request.getParameter("name") != null) {
            message += "Suchergebnis:<br>";
            EmployeeGateway gateway = new EmployeeGateway();
            list = //Logik
        }

Und in dem Iframe dann folgendes:
HTML:
<%request.getRequestDispatcher("SearchServlet").forward(request,response);%>
<%=request.getAttribute("results")%>
Leider zeigt der mir aber nichts an. Was ist falsch? Ich habe den Requestdispatcher so verstanden, das der sich aus einer Quelle (Servlet) den dispatcher holt und mit forward halt in sein eigenes Request schreibt. Stimmt das? Zu dem Prolbem mit dem RadioButton komm ich gar nicht erst. :-( Session findet er in meinem Servlet gar nicht.
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
HTML:
<%request.getRequestDispatcher("SearchServlet").forward(request,response);%>
<%=request.getAttribute("results")%>
Du machst einen forward, die zweite Zeile wird nie mehr ausgeführt...

Finde die Lösung mit dem iFrame nicht gut, Framesets sollten auf jedenfall nicht mehr verwendet, iFrame nur wenn es nicht anders geht.
Jeder (i)Frame ist eine neue Seite, hat nix mit denen "aussenrum" zu tun, macht die Sache unnötig komplex... würde dass ohne machen an deiner Stelle.
 

Phenix

Bekanntes Mitglied
Ok, und wenn ich das ohne mache, wie mache ich das dann, das für den Fall das viele Ergebnisse gefunden werden die Seite nicht extrem lang wird? Iframe hätte halt den Vorteil eines Scrollbalkens.

Aber danke schonmal ;) auch für das highlighten
 
M

maki

Gast
Stichwort Pagging.

Man zeigt eine bestimmte Anzahl von Ergebnissen pr Seite an, bietet aber die Möglichkeit, mehere Ergebnisseiten anzuzeigen, hast du sicher schon mal gesehen ;)
Im übrigen ist es keine gute Idee alle Ergebnissen anzuzeigen, der User könnte ja auf die Idee kommen ziemlich alles zu suchen, selten bringen aber alle Ergebnisse dem User einen Vorteil ;)
 

Phenix

Bekanntes Mitglied
Die Idee hatte ich auch schon. Leider weiss ich nicht, wie ich so etwas umsetzen kann. Ich kann ja zB mit Modulo prüfen, ob beispielsweise mehr als 2 Ergebnisse auf der Seite sind. Allerings muss ich dann ja dynamisch einen Link erstellen und zusätzlich eine neue Seite, die halt die nächsten 2 ergebnisse anzeigt. Nur wie?

So sieht das jetzt halt aus, wenn der alle ergebnisse ausgibt. Habe die Logik jetzt ums mir einfacher zu machen erstmal vom servlet wieder in die jsp verlagert.
HTML:
<%
        if(request.getParameter("name")!=null){%>
        <%=message%>
        <%}%>
 

HLX

Top Contributor
Java:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        ArrayList<EmployeeBean> list = new ArrayList<EmployeeBean>();
        String message = "<br>";
        if (request.getParameter("name") != null) {
            message += "Suchergebnis:<br>";
            EmployeeGateway gateway = new EmployeeGateway();
            list = //Logik
        }
Überschreibe nicht die ProcessRequest-Methode, sondern doGet(request,response) oder doPost(request,response).

Im Servlet must du das Session-Attribut setzen und über RequestDispatcher.findForward(...) auf die JSP-Seite mit dem IFrame verweisen. Sonst bekommst du nur eine weiße Seite angezeigt, da dein Servlet keine HTML-Ausgaben enthält. Nach der Weiterleitung auf die JSP-Seite sollte dann dort das Session-Attribut zur Verfügung stehen.
 

Phenix

Bekanntes Mitglied
Ok, klingt soweit logisch ;)

Also in meiner JSP verweise ich nun mit dem Form auf das Servlet:

HTML:
<div id="Content">
         <form method="post" action="SearchServlet">
     <input type="text" name="name" value=""><input type="submit" value="Suche"><br>
         search by:<br>
     <input type="radio" name="attribute" value="EMP_LASTNAME" checked>Nachname <br>  
     <input type="radio" name="attribute" value="EMP_FIRSTNAME">Vorname <br>
     <input type="radio" name="attribute" value="EMP_RANK">Arbeitsstatus <br>  
     <input type="radio" name="attribute" value="EMP_WORKSHIFT">Arbeitszeit<br>
         order by:<br>
     <input type="radio" name="order" value="EMP_LASTNAME" checked>Nachname <br>  
     <input type="radio" name="order" value="EMP_FIRSTNAME">Vorname <br>
     <%-- <input type="radio" name="order" value="EMP_RANK">Arbeitsstatus <br>  
     <input type="radio" name="order" value="EMP_WORKSHIFT">Arbeitszeit<br> --%>
     </form>
     <br>
        

         <iframe scrolling="auto" height="520px" width="800px" frameborder="0" src="SearchResults.jsp"/>

Die Methode ProcessRequest ist unverändert. Also mit dem Auskommentiertem outputStream.
In der doPost Methode im Servlet habe ich dann folgendes gemacht:

Java:
@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
        
        
        ArrayList<EmployeeBean> list=new ArrayList<EmployeeBean>();
        String message = "<br>";
        if (request.getParameter("name") != null) {
            message += "Suchergebnis:<br>";
            EmployeeGateway gateway = new EmployeeGateway();
            list = gateway.searchBy(request.getParameter("attribute"), request.getParameter("name"), request.getParameter("order"));
            for (int i = 0; i < list.size(); i++) {
                message += list.get(i).getFirstname() + " " + list.get(i).getName() + " (" + list.get(i).getGender() +
                        ")<br>" + list.get(i).getBirthday() + "." + list.get(i).getBirthmonth() + "." + list.get(i).getBirthyear() +
                        "<br>" + list.get(i).getStreet() + " " + list.get(i).getHousenumber() + " - " + list.get(i).getZip() + " " +
                        list.get(i).getCity() + "<br>" + "Arbeitsbeginn: " + list.get(i).getStartday() + "." + list.get(i).getStartmonth() +
                        "." + list.get(i).getStartyear() + "<br>" + list.get(i).getRank() + ": " + list.get(i).getWorkshift() + "<br>" + "|" +
                        list.get(i).getComment() + "|<br> <form action=\"SearchResults.jsp\"><input type=\"radio\" name=\"searchlist\" value=\"" + i + "\"></form><br>" +
                        "________________________________________<br><br>";}}
        HttpSession session=request.getSession();
        session.setAttribute("results", message);
        request.getRequestDispatcher("SearchEmployee.jsp").forward(request, response);
    }
Eine Methode findForward habe ich nicht gefunden.
und im Iframe dann folgendes:

HTML:
<%=session.getAttribute("results")%>

Es wird mir aber trotzdem noch eine weiße Seite angezeigt.???:L
 
Zuletzt bearbeitet:

HLX

Top Contributor
findForward war auch falsch. Da hab ich was mit Struts vermischt, sorry. Methode forward ist richtig.

Was macht die Methode processRequest?
 

Phenix

Bekanntes Mitglied
Im Moment macht sie eigentlich noch nichts. So wie sie halt default angelegt wird:

Java:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet SearchServlet</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet SearchServlet at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
            */

        } finally { 
            out.close();
        }
    }

Ich glaube ich hab den Sinn des RequestDispatchers in Verbindung mit der forward-Methode noch nicht verstanden sry. Also: Man holt sich den Request aus der Quelle (vorige Seite: JSP) oder? Das forward sorgt dann dafür, dass der weitergeleitet wird...aber wohin?
 

HLX

Top Contributor
Es wird auf die JSP-Seite, die du in der Methode getRequestDispatcher angegeben hast weitergeleitet.

Mehr Infos:
Java 2 Platform EE v1.3: Interface RequestDispatcher

Die Methode processRequest brauchst du nicht, da die Erzeugung von HTML deine JSP-Ausgabeseite vornimmt. Du solltest sie entfernen.

Die action im Formular-Tag benötigt eine Angabe, welche Webanwendung auf dem Server (bzw. welcher ServletContext) angesprochen werden soll. Ändere dein Formular-Tag wiefolgt:
Code:
<form method="post" action="<%= request.getContextPath() %>/SearchServlet">
 

Phenix

Bekanntes Mitglied
Achja, sorry das ich so lange nicht geantwortet habe. Das Problem ist übrigens gelöst. Nochmal danke ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H problem bei Parameterübergabe mit beans Web Tier 3
S AJAX/RestController Post Problem Web Tier 18
pkm Problem beim Import eines dynamischen Webprojekts als .zip Web Tier 2
O JSF Java Unsigned Applet PrivilegedActionException Problem Web Tier 2
F JSF preRenderView Problem Web Tier 0
J Funktion für AJAX - Problem mit Return Web Tier 14
S Problem mit Checkboxen im Servlet erkennen Web Tier 3
N JSF JSF Selected Item & GesBetrag Problem Web Tier 1
Shams Problem mit der verwirklichung einer Readmethode in einer Chatapplikation Web Tier 3
F JSF Problem mit Primefaces Web Tier 7
F JSF Problem mit Primefaces Web Tier 4
F JSP Problem mit Property Web Tier 0
D Java EE Servlet login Problem Web Tier 1
L java.io.NotSerializableException für domain Objekte - Design Problem? Web Tier 12
T JSF Character Encoding Problem Web Tier 2
T JSF Problem mit JSF und Foreign Key Tabellen Web Tier 8
H JSF Problem mit Converter Web Tier 2
M Zeichensatz Problem? Web Tier 3
T JSF Problem wenn Session abgelaufen ist Web Tier 6
K JSF websphere application server 8 tomahawk problem Unable to find resource Web Tier 3
D JSF RichFaces Tree-Beispiel Problem Web Tier 2
J JSF Problem mit Bearbeiten von Datensätzen Web Tier 7
M JSF Problem mit CSS und Unterverzeichnissen Web Tier 2
M JSP Problem beim deployen auf Tomcat Web Tier 2
P Servlet getWidth(); - getHight(); Problem Web Tier 3
J JSP Problem bei Hibernate mit JSP Web Tier 2
M JSF mit Tobago Problem: ServletContextListener Web Tier 5
J Facelets javascript compiler problem Web Tier 3
T Tomcat mit Servlets Problem Web Tier 7
T Servlet Problem bei gwt rpc Web Tier 7
S Servlet Problem mit Tomcat Web Tier 3
J JSF Kein Methodenaufruf mit Button möglich durch PhaseListener (redirect) Problem? Web Tier 2
P rich:panelMenuGroup --> expanded Parameter Problem Web Tier 3
F.S.WhiTeY Tmplating/CSS Problem bei JSF Web Tier 7
A ice:inputText Converter Problem Web Tier 2
B JSF Tomcat Windows Linux equals Problem Web Tier 3
R JSF JSF Composite Components: Problem mit Attributliste und Referenzierung Web Tier 2
M Problem mit Hibernate und GWT Web Tier 6
O JSP struts2 tag: Problem mit Dezimalzahlen Web Tier 2
P Struts Struts2 if tag Problem mit getText() Web Tier 3
B Java EE 6 Problem (EL) Web Tier 4
ruutaiokwu beanshell scope problem... Web Tier 7
P Problem mit HTML.Tag.OPTION Web Tier 3
N Problem mit Datei Streaming Web Tier 2
M Problem mit Verlinkung JSP Dynamische Tabelle Web Tier 7
S Architektur-Problem? 2 Servlets, ein Objekt Web Tier 4
F.S.WhiTeY JSF:org.apache.jasper.JasperException Problem Web Tier 2
H Richfaces - Taglib Problem gelb unterstrichen Ajax Output Web Tier 6
N Servlet: Problem mit getParameterValues Web Tier 4
7 Struts und Ajax. Problem mit Actions Web Tier 2
J GWT - RPC Problem Web Tier 6
F Problem mit JSF Anwendung Web Tier 9
I Logout - Problem => Bei Zurück Web Tier 2
I AJAX - Problem Web Tier 18
F Problem mit Struts Web Tier 2
I selectOneMenu - Problem Web Tier 6
H Firefox Background-Image Problem Web Tier 4
E GWT Server-Client Problem Web Tier 3
J Log4j problem Web Tier 7
F Problem mit der Methode request.getRemotePort() Web Tier 2
S GWT Problem Web Tier 4
M Problem mit Velocity Web Tier 2
S OSGi Bundle Problem - ClassNotFound Web Tier 4
J JSF Locales Problem Web Tier 3
J Problem mit Login Web Tier 4
MQue jsp- Problem Web Tier 4
A Tomcat: beim Start des Servers einmalige Aktion aufrufen (Problem gelöst) Web Tier 2
R JSF <rich:datatable> problem Web Tier 4
S JSF Problem - Terminverwaltung - Ändern eines vorhandenen Termins Web Tier 2
S Filter Problem? Web Tier 6
E Problem mit t:saveState Web Tier 7
S Problem mit Anzeige zweier JSP's Web Tier 4
M Problem mit JSP und Bean Web Tier 2
F RichFaces, Problem mit PickList Web Tier 2
S Problem mit Servlet und Zugriff auf Orace XE Datenbank Web Tier 2
E Problem mit request.getParameter Web Tier 5
B getServletContext.getRealPath("/") Problem Web Tier 6
C Problem mit Hibernate und IceFaces Web Tier 2
S Problem mit Session - Übergabe von Kontext zu Kontext Web Tier 2
U JSP form-Daten (ohne name-Attribut) an Servlet = Problem Web Tier 6
S jsf: übles problem mit <f:convertDateTime> Hilfe! Web Tier 2
A Selectbox Problem in JSP Web Tier 12
T Problem bei Session-Timeout Web Tier 3
S problem mit resultset Web Tier 6
U Problem bei Validierung mit Struts 2 Web Tier 1
A JSF-Ctrl h:inputText Problem mit Umlauten Web Tier 4
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
K JSF Unified-EL- Methode mit Parameterübergabe Web Tier 9
M JSF: Parameterübergabe an Properties-Datei aus JSF-Tag heraus? Web Tier 4
M CustomTags mit Body und Parameterübergabe Web Tier 2
G JSF Parameterübergabe Web Tier 3
M Parameterübergabe an die TagKlasse Web Tier 4
M iframe probleme Web Tier 2

Ähnliche Java Themen

Neue Themen


Oben