J'essaye de créer un client de socket avec une interface Web par JSF. Dans cette application, le client se connecte au serveur, envoie le message au serveur, reçoit le message du serveur et l'affiche sur la page JSF.Impossible de mettre à jour la valeur du composant qui est lié au bean
J'ai réussi à me connecter au message d'envoi du serveur de sockets et à recevoir un message. Je suis incapable d'afficher le message du serveur dans l'écran du navigateur. Lorsque j'imprime dans la console, il s'affiche correctement.
Mon code JSF est:
<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>
Et mon code java est:
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 "";
}
Quand je charge la page JSF, si le serveur est connecté 'Connexion Succès' est prise correctement, si pas connecté le message d'erreur est affiché correctement. Lorsque j'essaie d'afficher le message du serveur à l'écran, il ne s'affiche pas. Comment puis-je réparer cela?
Mise à jour Si je crée un nouveau composant de texte en sortie et que vous définissez le message du serveur comme valeur, le message Serveur s'affiche correctement. Je veux savoir pourquoi la liaison n'a pas fonctionné dans mon cas?
Merci d'avoir regardé ma question. Je pratique des applications socket en Java. Donc, pour commencer, j'ai créé un client basé sur le Web basé sur JSF. Vouliez-vous dire que créer un client socket basé sur le Web est risqué? Je ne suis pas au courant des problèmes ici. – mvg
Tous les liens vers la liste des problèmes seront utiles – mvg
Ok, je vais aller avec vous. Mais mon problème est basé sur JSF. Y a-t-il une solution pour ça? – mvg