Рассмотрим следующую страницу 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
— это простой bean-компонент с областью видимости, а text
— свойство типа String
. По какой-то причине это вызывает следующее сообщение в Safari 5.1:
httpError: Http Transport вернул код состояния 0. Обычно это результат смешивания ajax и полных запросов. Обычно это нежелательно как по причинам производительности, так и по причинам целостности данных.
Обновление 2 Причина этого, по-видимому, в том, что нажатие enter
внутри поля input
всегда вызывает отправку полной формы. Я понятия не имею, как предотвратить это. Как показано в первом примере, я хочу, чтобы пользователь ввел имя пользователя, а затем активируются другие компоненты формы (только если имя пользователя известно). Как бы мне реализовать это правильно?
h:inputText
. - person Björn Pollex   schedule 12.08.2011