首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么导致了这个页面上的完整请求?

是什么导致了这个页面上的完整请求?
EN

Stack Overflow用户
提问于 2011-08-11 13:26:42
回答 1查看 2.3K关注 0票数 3

考虑以下jsf页面:

代码语言:javascript
复制
<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>-tags。这里有什么问题?

更新

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

代码语言:javascript
复制
<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是一个简单的视图范围bean,text是一个String类型的属性.出于某种原因,这将触发Safari 5.1中的以下消息:

httpError: Http传输返回0状态代码。这通常是混合ajax和完整请求的结果。由于性能和数据完整性的原因,这通常是不可取的。

更新2原因似乎是,在input-field中命中enter总是会触发完整的表单提交。我不知道该怎么防止这件事。如第一个示例所示,我希望用户输入用户名,然后启用表单的其他组件(只有当用户名已知时)。我将如何正确地实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2011-08-20 19:30:09

造成此问题的原因是,在没有<h:commandButton>的情况下(在第一个示例中,它最初是禁用的,在第二个示例中,没有),按返回将触发整个表单的提交,从而导致问题中显示的错误。

目前的解决方案是始终启用<h:commandButton>。因为它是<f:ajax>-enabled,这将阻止完全提交。

P.S.:我发布这个答案是为了给其他人展示一个可能的解决方案。我仍然想知道是否有更好的解决方案(一个不需要<h:commandButton>的解决方案)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7026685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档