2010-11-26 12 views
5

Estoy tratando de convertir este scriptlet code a la clase JSF.convertir de scriptlet a problema de frijol administrado JSF

El código de la vista

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

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

y el código java

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; 
} 

Cuando corro código scriptlet, estoy recibiendo la respuesta como "El servidor dieron esto: ¡Hola!"

Cuando ejecuto el código JSF, no obtengo esta respuesta. Corrija mi error

Gracias de antemano

+0

¿cómo _run_ el código jsf ..? – Bozho

+0

¿Qué es lo que obtienes? –

+0

@tomas un personaje desconocido como este ঠ – mvg

Respuesta

3

Corrijo mi respuesta. El problema es el procesamiento de la corriente de entrada. Aquí está el código fijo:

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

Gracias por la corrección. Trabajaré con él y volveré – mvg

+0

. Creo que el problema principal de hecho fue el procesamiento del socket de entrada, en el que estaba configurando para cada byte el campo de valor, con una conversión directa a un carácter. El código @morja procesa el InputStream de forma correcta, por lo tanto, mi voto a favor para esta respuesta. –

+1

Es cierto. Solucioné el error del código (buffer/buf), gracias por el comentario. – morja

Cuestiones relacionadas