gpt4 book ai didi

ajax -
转载 作者:行者123 更新时间:2023-12-04 06:30:32 26 4
gpt4 key购买 nike

我有一个带有输入文本和 2 个命令按钮的简单表单。 inputText 很好地显示了支持 bean 的值,但是当我第一次更改值时,没有调用 set 方法,因此表单以空值提交。当我再次更改它时,将调用 set 方法并且一切正常。是什么原因,如何解决?

  <h:panelGroup id="chatId">
<h:panelGrid rendered="#{chat.validUser == true}">
<h:form id="sendMsgForm" >
<h:panelGroup id="chatId2">
<h:inputText id="chatInput" value="#{chat.msgTo}" autocomplete="off" >
<f:ajax execute="@this @form" />
</h:inputText>
<h:commandButton value="Send" id="sendButton" action="#{chat.send}">
<f:ajax render=":chatLogId :chatId" />
</h:commandButton>
<h:commandButton value="Bye" action="#{chat.bye}">
<f:ajax render=":chatLogId :chatId :chatUserId" />
</h:commandButton>
</h:panelGroup>
</h:form>
</h:panelGrid>
</h:panelGroup>

后台bean代码:

@SessionScoped
public class Chat implements Serializable, ActionListener, ValueChangeListener {
private String msgTo = "Start typing...";
private boolean validUser = false;

public void bye() {
validUser = false;
tc.disconnect();
}

public void send() {
try {
tc.sendMessage(msgTo);
setMsgTo("");
} catch (Exception e) {
e.printStackTrace();
}
}

// ...

最佳答案

Matt Handy 的代码片段是正确的解决方案,但对原因的解释不正确。

您省略了 execute <f:ajax> 的属性在命令按钮中。然后它将默认为 @this这意味着只有按钮本身的名称=值对被发送到服务器端(因此只有关联的操作将被调用;输入值不会被更新)。由于您想提交整个表单,因此需要显式设置 execute@form .

<h:commandButton value="Send" id="sendButton" action="#{chat.send}">
<f:ajax execute="@form" render=":chatLogId :chatId" />
</h:commandButton>

它在输入字段更改期间起作用是因为您输入了 execute="@form"在输入字段中。 <f:ajax> inside input fields 将默认在您更改值时执行。但在这种特殊情况下,您根本不需要它。所以摆脱它:

<h:inputText id="chatInput" value="#{chat.msgTo}" autocomplete="off" />

关于ajax - <h :inputText value not updating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476510/

26 4 0

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