Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从scriptlet到JSF托管bean的转换问题_Java_Jsp_Jsf_Scriptlet - Fatal编程技术网

Java 从scriptlet到JSF托管bean的转换问题

Java 从scriptlet到JSF托管bean的转换问题,java,jsp,jsf,scriptlet,Java,Jsp,Jsf,Scriptlet,我正在尝试将其转换为JSF类 视图代码 <f:view> <h:form binding="#{jsfSocketClient.form}"> <h:outputText binding="#{jsfSocketClient.text}"/> </h:form> </f:view> 当我运行scriptlet代码时,我得到的答案如下 “服务器收到:你好!” 当我运行JSF代码时,我没有得到这个回复。请纠正我的错误 提前谢谢我

我正在尝试将其转换为JSF类

视图代码

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

</h:form>
</f:view>
当我运行scriptlet代码时,我得到的答案如下 “服务器收到:你好!”

当我运行JSF代码时,我没有得到这个回复。请纠正我的错误


提前谢谢

我更正了我的答案。问题是输入流的处理。以下是固定代码:

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

如何运行jsf代码?“你得到的是什么?”托马斯是这样一个不知名的人物ঠ@mvg:这是因为您的InputStream处理代码错误造成的。您不应该将每个字节直接强制转换为一个字符,因为某些特殊字符可能有两个字节长。此外,您正在覆盖每个字节的文本值,因此在最后,文本仅包含一个字节。检查@morja answer,这是InputStream处理。@托马斯,你发现了正确的问题。我没有正确处理inputstream。除了尝试morja的代码外,我还修改了问题中提供的代码。我使用Stringbuffer附加输入值,并在循环外部将Stringbuffer设置为HtmlOutText。我认为主要的问题实际上是输入套接字处理,他为每个字节设置值字段,并直接转换为字符@morja代码以正确的方式处理InputStream,因此我对这个答案投赞成票。正确。我修复了代码(buffer/buf)错误,谢谢您的评论。@morja当我使用更新的代码时,错误是“类型InputStream中读取的方法(字节[])不适用于参数(字符[])”。我调试了您以前的代码,它从服务器接收到一些输入,但只有空字符串返回output@mvg是的,很抱歉,我在代码中遗漏了另一件事,我将其更改为使用读取器。@morja绑定不是问题所在
    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);