gpt4 book ai didi

java - 无法更新绑定(bind)到 bean 的组件的值

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:32 24 4
gpt4 key购买 nike

我正在尝试通过 JSF 创建一个带有 Web UI 的套接字客户端。在此应用程序中,客户端连接到服务器,向服务器发送消息,从服务器接收消息并将其显示在 JSF 页面上。

我设法连接到套接字服务器发送消息和接收消息。我无法在浏览器屏幕中显示来自服务器的消息。当我在控制台中打印时,它显示正确。

我的 jsf 代码是:

<f:view>
<h:form binding="#{jsfSocketClient.form}">
<a4j:keepAlive beanName="jsfSocketClient"/>
<h:outputText binding="#{jsfSocketClient.outputMessageBinding}"/>
<br/>
<h:inputText value="#{jsfSocketClient.inputFromUser}"/>
<br/>
<h:commandButton action="#{jsfSocketClient.sendMessage}" value="Send"/>
</h:form>
</f:view>

我的java代码是:

public HtmlForm getForm() {
try {
socket = new Socket("192.168.1.115", 4444);
response = "Connection Success";
outputMessageBinding.setValue("Connection Success");
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (Exception e) {
e.printStackTrace();
response = "You must first start the server application (YourServer.java) at the command prompt.";
outputMessageBinding.setValue(response);
}
return form;
}

public String sendMessage() {
outputMessageBinding.setValue("");
try {
//String str = "Hello!\n";
out.println(getInputFromUser());
try {
String line = in.readLine();
outputMessageBinding.setValue(line);
System.out.println("Text received :" + line);
} catch (IOException e) {
outputMessageBinding.setValue(e.getMessage());
System.out.println("Read failed");
System.exit(1);
}
//response = result.toString();

if (getInputFromUser().equalsIgnoreCase("bye")) {
socket.close();
}
} catch(Exception e) {
outputMessageBinding.setValue(e.getMessage());
e.printStackTrace();
}
return "";
}

当我加载 jsf 页面时,如果服务器已连接,则会正确显示“连接成功”,如果未连接,则会正确显示错误消息。当我尝试在屏幕上显示服务器消息时,它没有显示。我该如何解决这个问题?

更新如果我创建新的 outputtext 组件并将来自服务器的消息设置为其值,则服务器消息将正确显示。我想知道为什么绑定(bind)在我的案例中不起作用?

最佳答案

从 JSF/网页打开新套接字是一个主要的反模式。你为什么要这样做?

您是否了解所有影响/限制/风险/问题?

更新:

从网页创建套接字对性能和安全性有多种影响。

如果您只想练习 Java 套接字,最简单的方法是使用命令行客户端。 http://download.oracle.com/javase/tutorial/networking/sockets/clientServer.html

无需使用 JSF 或任何其他网络技术增加额外的复杂性。您可以在没有 Web 服务器的情况下使用套接字。 (事实上​​套接字早在 http 之前就存在了)。

关于java - 无法更新绑定(bind)到 bean 的组件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com