2016-08-03 25 views
0

Ich arbeite an einem CMS namens Jahia, und ich versuche, eine Liste von Dateien aus einer XML-Liste mit Schaltflächen aufzurufen, die Aktionen aufrufen, um die Datei anzuzeigen.Warum HTML <button type = "submit"> funktioniert nicht mit Internet Explorer?

es funktioniert gut mit Mozilla-Browser, aber mit Internet Explorer wird die Liste angezeigt, aber die Tasten im Inneren funktioniert nicht. Irgendeine Idee ? Ich denke, dass das Problem mit der Liste der, vielleicht IE verwenden Sie es nicht wie die anderen Browser

<!DOCTYPE html> 
<%@ taglib prefix="jcr" uri="http://www.jahia.org/tags/jcr" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<%@ taglib prefix="utility" uri="http://www.jahia.org/tags/utilityLib" %> 
<%@ taglib prefix="template" uri="http://www.jahia.org/tags/templateLib" %> 
<%@ taglib prefix="functions" uri="http://www.jahia.org/tags/functions" %> 


<jsp:useBean id="displayList" class="org.jahia.modules.connect.displayList" scope="request"> 
      <jsp:setProperty name="displayList" property="userID" value="10" /> 


</jsp:useBean> 


    <form action="<c:url value='${url.base}${currentNode.path}.Connect.do'/>" method="post" id="ContactForm" enctype="multipart/form-data"> 
    </form> 
<table id="table_id" class="display" width="100%" cellspacing="1" cellpadding="0" border="1" align="left" bgcolor="#999999">> 
    <caption> Files of current user</caption> 
    <thead> 
    <tr> 
     <th>Download</th> 
     <th>Directory</th> 
     <th>file Name</th> 
     <th>document type</th> 
     <th>Date</th> 
    </tr> 
    </thead> 
    <tbody> 

     <c:forEach items="${displayList.test}" var="CdFile"> 
      <tr> 
       <td><button name="subject" form="ContactForm" type="submit" value="${CdFile.path}">Download</button></td> 
       <td>${CdFile.folder}</td> 
       <td>${CdFile.fileName}</td> 
       <td>${CdFile.docType}</td> 
       <td>${CdFile.date}</td> 
      </tr> 
     </c:forEach> 
    </tbody> 
</table> 

ich den Wert von Benutzer-ID fest einprogrammiert haben für

Prüfung

dort die javabean aufgerufen zu lesen die XML und dann die Liste der Dateien erstellen

public class displayList{ 
    private String userID; 
    private String pathToXML = "C:\\Users\\adm_fjousse\\Desktop\\serviceWin$test\\CnD_1000\\" ; 
    FileList fileList = new FileList(); 
    private List<CdFile> test = new ArrayList<CdFile>(); 
    public void setUserID(String userID){ 
    this.userID = "ID"+ userID; 
    this.pathToXML = this.pathToXML + this.userID + ".xml"; 

    startSocket(); 
    } 

    public String getUserID(){ 
    return this.userID; 
    } 
    public List<CdFile> getTest(){ 
    return this.test; 
    } 

    public void startSocket(){ 

     BufferedReader in; 
     PrintWriter out; 

     XStream xStream = new XStream(); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream() ; 
     String xml = ""; 
     try{ 
      //D'abord le client se connecte et attend un message. 
      Socket sock = new Socket(InetAddress.getByName("10.232.12.6"),2008); 
      in = new BufferedReader (new InputStreamReader (sock.getInputStream())); 
      //String message_distant = in.readLine(); 
      System.out.println("1================================"); 
      //Puis il dit qui il est 
      out = new PrintWriter(sock.getOutputStream()); 
      out.println(userID); 
      out.flush(); 

      //Ensuite le serveur va lui envoyer le fichier correspondant en fonction de son ID 
      transfert(sock.getInputStream(),baos, true); 
      System.out.println("size ===="+ baos.size()); 
      System.out.println(userID); 
      xml =baos.toString("UTF-8"); 



      xStream.alias("CdFile", CdFile.class); 
      xStream.alias("files", FileList.class); 

      xStream.addImplicitCollection(FileList.class, "fileList"); 

      System.out.println("2================================"+ xml); 
      this.fileList = (FileList)xStream.fromXML(xml); 
      System.out.println(fileList); 
      this.test = fileList.getFileList(); 
      System.out.println("3================================");  
      sock.close(); 
     } 
     catch(Exception e){ 
      e.getMessage(); 
     } 
    } 
    public static void transfert(InputStream in , OutputStream out, boolean closeOnExit) throws Exception{ 
    try{byte buf[] = new byte[1024]; 
     int n; 

     while((n=in.read(buf))!=-1){ 
     System.out.println("============loop"); 

      out.write(buf,0,n); 

      out.flush(); 
      } 
     out.close(); 
     } 
     catch(Exception e){ 
      e.getMessage(); 
     } 

    } 

    } 

Es ist die Aktion, die Datei anzuzeigen aufgerufen, wenn ein Onclick Aufruf ist:

public class Connect extends Action{ 
    @Override 
    public ActionResult doExecute(HttpServletRequest req, RenderContext renderContext, Resource resource, 
             JCRSessionWrapper session, Map<String, List<String>> parameters, 
             URLResolver urlResolver) throws Exception{ 
      System.out.println("11212================================"); 

     HttpServletResponse r = renderContext.getResponse(); 

     BufferedReader in; 
     PrintWriter out; 
      System.out.println("first================================"); 

     String fileToSend = parameters.get("subject").get(0); 
     System.out.println(fileToSend); 
     System.out.println("1================================"); 
     try{ 
      //D'abord le client se connecte et attend un message. 
      Socket sock = new Socket(InetAddress.getByName("10.232.12.6"),2008); 
      in = new BufferedReader (new InputStreamReader (sock.getInputStream())); 
      //String message_distant = in.readLine(); 
      //System.out.println(message_distant); 
      //Puis il dit qui il est   
      System.out.println("1================================"); 

      out = new PrintWriter(sock.getOutputStream()); 
      out.println(fileToSend); 
      out.flush(); 
         System.out.println("2================================"); 

      //Ensuite le serveur va lui envoyer le fichier correspondant en fonction de son ID 
      transfert(sock.getInputStream(),r.getOutputStream(), true); 
      renderContext.setResponse(r); 
      System.out.println("3================================"); 

      sock.close(); 

     } 
     catch(Exception e){ 
      e.getMessage(); 
     } 
    return new ActionResult(HttpServletResponse.SC_OK, null, new JSONObject());//,null, generateJSONObject(clientNode)); 
    } 
    public static void transfert(InputStream in , OutputStream out, boolean closeOnExit) throws Exception{ 
    try{byte buf[] = new byte[1024]; 
     int n; 
     while((n=in.read(buf))!=-1){ 
      out.write(buf,0,n); 
      System.out.println("4================================"); 

      out.flush();} 
     } 
     catch(Exception e){ 
      e.getMessage(); 
     } 

    } 
    } 

Serverklasse

public class ClientService extends Thread 
{ 
    Socket sockClient; 


    /*******************************************/ 
    public ClientService(Socket client) 
    { 
     sockClient = client; 
     start(); 
    } 

    /*******************************************/ 
    public void run() 
    { 
     try 
     { 
      BufferedReader in = new BufferedReader(new InputStreamReader(sockClient.getInputStream())); 
      //PrintStream out = new PrintStream(sockClient.getOutputStream()); 

      String distantMsg = in.readLine(); 
      if(distantMsg.contains("ID") && distantMsg.length() < 15) { 

       String fileToSend = "C:\\Users\\adm_fjousse\\Desktop\\output\\"+ distantMsg +".xml"; 
       Commun.transfert(new FileInputStream(fileToSend), 
         sockClient.getOutputStream(), 
         true); 




      } 
      else{ 
       String fileToSend = distantMsg; 
       Commun.transfert(new FileInputStream(fileToSend), 
         sockClient.getOutputStream(), 
         true); 
      /*out.println("service running : "+(new Date())); 
      out.flush(); 
      out.close();*/ 
      } 
     } 
     catch(Exception ex) {} 

     try 
     { 
      sockClient.close(); 
     } 
     catch(Exception ex) {} 

     sockClient = null; 
    } 
} 

class Commun{ 
     public static void transfert(InputStream in , OutputStream out, boolean closeOnExit) throws IOException{ 
     byte buf[] = new byte[1024]; 
     int n; 
     while((n=in.read(buf))!=-1){ 
      out.write(buf,0,n); 
      out.flush(); 
     } 
     if(closeOnExit){ 
      in.close(); 
      out.close(); 
     } 
    } 
    } 

[my fina 

l Ansicht mit mozilla Werke] 1

+0

Da JSP nicht auf dem Browser gelesen wird, das nicht kommt Von dort wird die JSP auf Ihrem Anwendungsserver gelesen. – AxelH

+0

@AxelH Ja, ich weiß, aber die Schaltfläche und die Aktion werden nach der Verarbeitung des Servers gleich sein – cryckx

+1

Das ist also ein Javascript/JQuery-Problem, das 'jsp'-Tag als nichts zu tun (wie die Titelreferenzierung JSP) Das ist Javascript oder HTML Problem mit Internet Explorer. Gibt es einen Fehler in der Konsole des Browsers? – AxelH

Antwort

1

Nach einiger Lektüre verwenden Sie eine Taste, um das Formular abzuschicken. So finden Sie das Problem hier in der Browser-Support-Tabelle http://www.w3schools.com/tags/att_button_form.asp

Sie verwenden das Formularattribut von Button. Dies wird von IE nicht unterstützt. Sie sollten dies stattdessen verwenden

<input type="submit" value="Download"/> 

Und legen Sie Ihre Tabelle in das Formular.

EDIT: Nun, es gibt eine Menge Kommentar da ein Anfang ^^ Quentin lesen, wenn Sie Ihre Antwort schreiben, ich will meine entfernen;)

+0

Okay, danke @ AxelH, gibt es eine Lösung, um eine Schaltfläche mit einem Label anzuzeigen, das sich vom Wert unterscheidet, z. B. Value = "c: \ blablablabla \ file".txt "und die Schaltfläche Display Download? – cryckx

+0

@cryckx Wert wird verwendet, um den Text des" Knopfes "zu setzen, aber Sie können ein Daten-Attribut verwenden, um diese URL zu setzen. – AxelH