gpt4 book ai didi

ajax - 是什么导致此页面上的完整请求?

转载 作者:行者123 更新时间:2023-12-02 02:23:34 27 4
gpt4 key购买 nike

考虑以下 jsf 页面:

<h:body>
<h:form id="SessionStartDialog">
<table>
<tr>
<td class="label">
<h:outputLabel
value="Enter your username:"
for="UsernameField"/>
</td>
<td class="input">
<h:inputText
id="UsernameField"
value="#{login.username}"
validator="#{login.validateUsername}"
tabindex="1">
<f:ajax render="SelectWorkingSetListbox
StartSessionButton UsernameMessage" />
</h:inputText>
<h:message
id="UsernameMessage"
for="UsernameField" />
</td>
</tr>
<tr>
<td class="label">
<h:outputLabel
value="Choose a working-set:"
for="SelectWorkingSetListbox"/>
</td>
<td class="input">
<h:selectOneMenu
id="SelectWorkingSetListbox"
tabindex="2"
disabled="#{!login.showWorkingSets}"
value="#{login.selectedWorkingSetName}">
<f:selectItems
value="#{login.workingSetNames}"/>
<f:ajax />
</h:selectOneMenu>
</td>
</tr>
</table>
<h:commandButton
id="StartSessionButton"
styleClass="StartSessionButton"
disabled="#{!login.showWorkingSets}"
value="Start Session"
tabindex="3"
action="#{login.startSession}" >
<f:ajax execute="@form"/>
</h:commandButton>
</h:form>
</h:body>

其中的某些内容导致 Safari 报告混合了 ajax 和完整请求的错误。我不明白为什么,因为所有引起请求的组件都包含 <f:ajax> -标签。这里有什么问题?

更新:

我创建了一个触发此错误的最小示例:

<h:body>
<h:form>
<f:ajax render="TextField">
<h:inputText value="#{theBean.text}" />
</f:ajax>
<h:outputText id="TextField" value="#{theBean.text}" />
</h:form>
</h:body>

theBean是一个简单的 View 范围 bean 和 text String 类型的属性.由于某种原因,这会在 Safari 5.1 中触发以下消息:

httpError: The Http Transport returned a 0 status code. This is usually the result of mixing ajax and full requests. This is usually undesired, for both performance and data integrity reasons.

更新 2 原因似乎是点击 enterinput里面-field 总是触发完整的表单提交。我不知道如何防止这种情况。如第一个示例所示,我希望用户输入用户名,然后启用表单的其他组件(仅当用户名已知时)。我该如何正确实现?

最佳答案

我会捕获 <form> 上的 Enter 键而是触发 onchange<input> 上按下此键的元素。

<h:form onkeydown="enterToChange(event)">
...
</h:form>

function enterToChange(event) {
if (event.keyCode == 13 && event.target.tagName != 'textarea') {
event.stopPropagation(); // Don't bubble up.
event.preventDefault(); // Prevent default behaviour (submitting the form).
event.target.onchange(); // Trigger onchange where key was actually pressed.
}
}

请注意,这会忽略文本区域上的回车键,您当然希望在这些区域保持预期的行为(插入新行)。

如有必要,您可以添加额外检查以查看提交按钮是否不是 disabled如果是这样的话,那就让事情过去吧。

关于ajax - 是什么导致此页面上的完整请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7026685/

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