Как я предотвращаю перепредставление формы во Шве?

Для конкатенации двух строковых использований '+' новая строка должна быть выделена с пространством для обеих строк, и затем данными, скопированными с обеих строк. StringBuffer оптимизирован для конкатенации и выделяет больше места, чем необходимый первоначально. При конкатенации новой строки, в большинстве случаев, символы могут просто быть скопированы до конца существующего строкового буфера.
Для конкатенации двух строк, '+' оператор будет, вероятно, иметь меньше служебным, но поскольку Вы связываете больше строк, StringBuffer выйдет вперед, с помощью меньшего количества выделений памяти и меньшего количества копирования данных.

6
задан BalusC 9 January 2011 в 15:43
поделиться

3 ответа

Шов поставляется с токеном s: компонент, и это то, что вы ищете: http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/controls.html#d0e28933

6
ответ дан 8 December 2019 в 17:23
поделиться

В a4j / RichFaces используйте очередь a4j: или назначьте очередь кнопке. Таким образом, несколько кликов будут поставлены в очередь, и только один будет фактически выполнен. Способ установить его глобально для вашего приложения, если вы используете RichFaces (мы сделали это вместо создания очереди повсюду), - это поместить в ваш web.xml следующее:

<context-param>
    <param-name>org.richfaces.queue.global.enabled</param-name>
    <param-value>true</param-value>
</context-param>
2
ответ дан 8 December 2019 в 17:23
поделиться

Чтобы избежать двойных отправок, вызванных нетерпеливым нажатием кнопки отправки, можно использовать фрагмент Javascript, который отключает кнопку отправки через несколько мс после onclick.

Пример:

<h:commandButton 
    id="foo"
    value="submit"
    action="#{bean.submit}"
    onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);"
/>

Чтобы избежать двойного отправляет, нажав кнопку "Назад" и игнорируя предупреждение браузера о том, что вы рискуете повторно отправить данные, вам необходимо реализовать шаблон Post-Redirect-Get (PRG) .

В JSF это можно сделать в основном 2 способами. Либо используя в :

<navigation-case>
    <from-action>#{bean.submit}</from-action>
    <from-outcome>success</from-outcome>
    <to-view-id>/page.jsf</to-view-id>
    <redirect/>
</navigation-case>

, либо вызывая ExternalContext # redirect () в методе действия bean-компонента:

public void submit() {
    doYourThing();
    FacesContext.getCurrentInstance().getExternalContext().redirect("page.jsf");
}

Единственный недостаток состоит в том, что при перенаправлении неявно создается запрос новый , тем самым уничтожая исходный запрос, включая все его атрибуты (и, таким образом, также все управляемые компоненты с ограниченным объемом запроса и FacesMessages ). В некоторых случаях это не имеет значения, но в других случаях обязательно. Я не использую Seam, но, если я прав, они решили эту проблему с помощью так называемой области разговора и автоматического сохранения FacesMessages через перенаправление. Вы могли бы воспользоваться этим.

6
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: