2010-11-26 10 views
5

Ich versuche, diese scriptlet code in JSF-Klasse zu konvertieren.von Scriptlet in JSF Managed Bean Problem konvertieren

Die Codeansicht

<f:view> 
<h:form binding="#{jsfSocketClient.form}"> 
    <h:outputText binding="#{jsfSocketClient.text}"/> 

</h:form> 
</f:view> 

und der Java-Code

private HtmlForm form = new HtmlForm(); 
private HtmlOutputText text = new HtmlOutputText(); 

public HtmlForm getForm() 
{ 
    System.out.println("instance: "+FacesContext.getCurrentInstance().getResponseWriter()); 
    ResponseWriter writer = (FacesContext.getCurrentInstance()).getResponseWriter(); 
    try{ 

     int character; 
     Socket socket = new Socket("127.0.0.1", 8765); 

     InputStream inSocket = socket.getInputStream(); 
     OutputStream outSocket = socket.getOutputStream(); 

     String str = "Hello!\n"; 
     byte buffer[] = str.getBytes(); 
     outSocket.write(buffer); 
     char characters = 0; 
     while ((character = inSocket.read()) != -1) { 
      text.setValue((char)character); 
      //writer.write((char)character); 
      //characters += (char)character; 
     } 
     //text.setValue(characters); 
     if(str.equalsIgnoreCase("bye")) 
       { 
        socket.close(); 
       } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     text.setValue("You must first start the server application (YourServer.java) at the command prompt.");   
    } 
    return form; 
} 

Wenn ich scriptlet Code ausführen, bin ich die Antwort als bekommen "Der Server diese bekam: Hallo!"

Wenn ich den JSF-Code ausführe, bekomme ich diese Antwort nicht. Bitte korrigieren Sie meinen Fehler

Vielen Dank im Voraus

+0

Wie Sie _run_ die JSF-Code ..? – Bozho

+0

Was bekommen Sie stattdessen? –

+0

@tomas einige unbekannte Zeichen wie diese ঠ – mvg

Antwort

3

Ich korrigiere meine Antwort. Das Problem ist die Verarbeitung des Eingabestroms. Hier ist der feste Code:

String response = ""; 
    try { 

     Socket socket = new Socket("127.0.0.1", 8765); 

     Reader reader = new InputStreamReader(socket.getInputStream()); 
     OutputStream outSocket = socket.getOutputStream(); 

     String str = "Hello!\n"; 
     byte buffer[] = str.getBytes(); 
     outSocket.write(buffer); 

     CharArrayWriter result = new CharArrayWriter(); 
     char[] buf = new char[4096]; 
     int charsRead = 0; 
     while ((charsRead = reader.read(buf)) != -1) { 
      result.write(buf, 0, charsRead); 
     } 
     response = result.toString(); 

     if (str.equalsIgnoreCase("bye")) { 
      socket.close(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     response = "You must first start the server application (YourServer.java) at the command prompt."; 
    } 
    text.setValue(response); 
+0

Danke für die Korrektur. Ich werde damit arbeiten und zurück – mvg

+0

Ich denke, dass das Hauptproblem in der Tat war die Eingabe-Socket-Verarbeitung, in der er für jedes Byte das Wertfeld mit einer direkten Umwandlung in ein Zeichen festgelegt wurde. @morja code verarbeitet den InputStream korrekt, also mein upvote für diese Antwort. –

+1

Wahr. Ich habe den Code (Puffer/Buf) Fehler behoben, danke für die Bemerkung. – morja

Verwandte Themen