【发布时间】:2011-05-16 01:37:40
【问题描述】:
我正在尝试将此 scriptlet code 转换为 JSF 类。
查看代码
<f:view>
<h:form binding="#{jsfSocketClient.form}">
<h:outputText binding="#{jsfSocketClient.text}"/>
</h:form>
</f:view>
还有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;
}
当我运行 scriptlet 代码时,我得到的答案是 “服务器收到了这个:你好!”
当我运行 JSF 代码时,我没有收到此回复。请纠正我的错误
提前致谢
【问题讨论】:
-
你如何运行 jsf代码..?
-
你得到了什么?
-
@tomas 像这样的一些未知角色ঠ
-
@mvg:这是因为您的 InputStream 处理代码错误。您不应该将每个字节直接转换为 char,因为某些特殊字符可能是两个字节长。此外,您将覆盖每个字节的文本值,因此最后,文本仅包含一个字节。检查@morja 答案,它是 InputStream 处理。
-
@Tomas 你发现了正确的问题。我没有正确处理输入流。除了尝试 morja 的代码之外,我还修改了问题中提供的代码。使用 Stringbuffer,我附加了输入值,并在循环之外将 Stringbuffer 设置为 HTMLOutputText。这也有效。