ScriptletからJSFマネージドビーンの問題に変換します
質問
私はこれを変換しようとしています スクリプトレットコード 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コードを実行しても、この返信が表示されません。私の間違いを修正してください
前もって感謝します
解決
答えを修正します。問題は、入力ストリームの処理です。これが固定コードです:
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);
所属していません StackOverflow