Java 从scriptlet到JSF托管bean的转换问题
我正在尝试将其转换为JSF类 视图代码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代码时,我没有得到这个回复。请纠正我的错误 提前谢谢我
<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);