Проверка JSF для внедренных элементов на стороне клиента - PullRequest
1 голос
/ 19 августа 2011

Я знаю, что в asp.net есть свойство (возможно, это EnableEventValidation тега <% @ Page%>). Однажды возникла проблема, когда я пытаюсь добавить выбранные элементы в компонент с использованием JavaScript, я хочу знать,как jsf справляется с этим. То есть,

, если я отправляю ах: выберите *, как показано ниже, и клиент добавит новый элемент "option3" в список элементов, если jsf обнаружит это автоматически перед обновлением значений модели.

<h:selectOneMenu  id="type"  
                  value="#{foo.value}"
                  required="true" 
                  requiredMessage="Type is required"   
                  style="width:100px">
  <f:selectItem  value="option1}"/>
  <f:selectItem  value="option2}"/>

</h:selectOneMenu>

Ответы [ 2 ]

1 голос
/ 19 августа 2011

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

В вашем примере правильный способ добавить элемент в select* items - сохранить выбираемые элементы в структуре данных внутри компонента (вероятно, @ViewScoped), а затем выполнить частичное обновление через AJAX для компонента select* или его компонента-контейнера, когда на стороне сервера появляется возможностьузнайте об изменениях и сможете корректно обновлять клиентскую часть.

Конечно, вы можете взломать только Javascript, но тогда зачем использовать JSF?Весь смысл JSF состоит в том, чтобы избежать необходимости таких хаков.

Помните, что JSF - это не JSP, который по сути является макросом println для вывода html.JSF хранит представление компонентов страницы на стороне сервера, отражая представление браузера.

В демонстрации Primefaces приведены примеры того, как выполнять частичные обновления.Более конкретно это пример , который вы можете искать.Это доступно в стандартном JSF2, для JSF 1.2 вы должны использовать библиотеку компонентов, чтобы получить поддержку AJAX.

0 голосов
/ 19 августа 2011

Вы не должны добавлять новую опцию с помощью JavaScript, но вы должны добавить новую опцию с помощью JSF.JSF нужно как-то знать о новой опции, чтобы разрешить отправленное значение.Новая опция действительно должна обслуживаться <f:selectItem(s)>.В противном случае вы будете сталкиваться с Validation error: Value not valid все время при отправке значения параметра, которое добавляется JS.В конце концов, это всего лишь гарантия JSF, чтобы клиенты не могли манипулировать запросом и отправлять значения, которые они не должны отправлять.

Следующий пример запуска должен работать:@ViewScoped управляемый компонент выглядит примерно так:

private String item;
private List<String> items = Arrays.asList("option1", "option2");
private String newItem;

public void addNewItem() {
    items.add(newItem);
}

// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...