действие/метод прослушивателя commandButton/commandLink/ajax не вызванное или входное значение не устанавливало/обновляло

Для начала, ваш градиент может быть упрощен, как показано ниже.

.box{
 background: 
  radial-gradient( farthest-side at bottom left, rgba(218, 218, 216, 0.5), transparent), 
  radial-gradient( farthest-corner at bottom right, rgba(253, 253, 253, 0.5), transparent 300px);
 height:200px;
}

body {
 background:blue;
}

Теперь проблема в том, что сафари не поддерживает синтаксис, используемый с at, как вы можете видеть в Страница MDN :

enter image description here

Вы можете изменить свой синтаксис, как показано ниже. Я разделю градиент, чтобы лучше видеть результат, тогда вы можете легко объединить их.

Первый градиент:

.box{
 background: 
  radial-gradient( farthest-side at bottom left, rgba(218, 218, 216, 0.5), red);
 height:200px;
}

.box2{
 background: 
  radial-gradient( farthest-side, rgba(218, 218, 216, 0.5), red) top right/200% 200%;
 height:200px;
}

Второй градиент

[ 1138]
.box{
 background:  
  radial-gradient( farthest-corner at bottom right, rgba(253, 253, 253, 0.5), red 300px);
 height:200px;
}

.box2{
 background:  
  radial-gradient( farthest-corner, rgba(253, 253, 253, 0.5), red 300px) top left/200% 200%;
 height:200px;
}

Хитрость в том, что если вы удалите at, градиент по умолчанию начнется с центра, а при запуске с центра нам понадобится X расстояние, чтобы достичь угла или сторон, в отличие от того, когда мы начинаем с угла, когда нам потребуется удвоенное расстояние X. Вот почему я сделал градиент размером 200% 200%, и я просто настраиваю фоновое положение, чтобы оно имело ту же визуализацию.

Вот последний фон:

.box{
 background: 
  radial-gradient( farthest-side, rgba(218, 218, 216, 0.5) , transparent) top right/200% 200%, 
  radial-gradient( farthest-corner, rgba(253, 253, 253, 0.5), transparent 300px) top left/200% 200%;
 height:200px;
}

body {
 background:blue;
}

332
задан Kukeltje 13 September 2017 в 22:59
поделиться

2 ответа

Введение

Каждый раз, когда компонент UICommand ( ,

и т. д.) не может вызвать связанный метод действия или компонент UIInput ( , и т. д.) не может обработать отправленные значения и / или обновить значения модели, и вы не видите никаких исключений и / или предупреждений googlable в журнале сервера, также не при настройке обработчика исключений ajax согласно Обработка исключений в запросах JSF ajax , а также когда вы устанавливаете ниже параметр контекста в web.xml ,

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

, и вы также не видите никаких ошибок и / или предупреждений в консоли JavaScript браузера (нажмите F12 в Chrome / Firefox23 + / IE9 +, чтобы открыть набор инструментов веб-разработчика, а затем откройте вкладку Консоль ), затем просмотрите приведенный ниже список возможных причин.

Возможные причины Компоненты

  1. UICommand и UIInput должны быть размещены внутри компонента UIForm , например (и, следовательно, не простой HTML

    ), иначе ничего не может быть отправлено на сервер. Компоненты UICommand также не должны иметь атрибута type = "button" , иначе это будет неработающая кнопка, которая полезна только для JavaScript onclick . См. Также Как отправлять входные значения формы и вызывать метод в bean-компоненте JSF и не инициирует обратную передачу .

  2. Вы не можете вложить несколько компонентов UIForm друг в друга. Это незаконно в HTML. Поведение браузера не указано. Остерегайтесь включаемых файлов! Вы можете использовать компоненты UIForm параллельно, но они не будут обрабатывать друг друга во время отправки. Вы также должны быть осторожны с антипаттерном «Форма Бога»; убедитесь, что вы непреднамеренно не обрабатываете / не проверяете все другие (невидимые) входные данные в той же самой форме (например, имея скрытый диалог с необходимыми входными данными в той же самой форме). См. Также Как использовать на странице JSF? Единая форма? Несколько форм? Вложенные формы? .

  3. Нет Ошибка проверки / преобразования значения UIInput не должна была произойти. Вы можете использовать для отображения любых сообщений, которые не отображаются какими-либо специфичными для ввода компонентами . Не забудьте включить id из в , если таковой имеется, чтобы он был обновлен. а также на запросы ajax. См. Также h: messages не отображает сообщения при нажатии p: commandButton .

  4. Если компоненты UICommand или UIInput помещаются внутри повторяющегося компонента, например , и т. д., то вам необходимо убедиться, что точно такое же значение итерационного компонента сохраняется во время фазы применения значений запроса в запросе отправки формы. JSF будет повторять это, чтобы найти нажатую ссылку / кнопку и отправленные входные значения.Помещение bean-компонента в область просмотра и / или обеспечение загрузки модели данных в @PostConstruct bean-компонента (и, следовательно, не в методе получения!) Должно исправить это. См. Также Как и когда мне следует загрузить модель из базы данных для h: dataTable .

  5. Если компоненты UICommand или UIInput включены динамическим источником, например , тогда вам нужно убедиться, что точно такой же # {bean.Значение include} сохраняется во время построения представления запроса на отправку формы. JSF выполнит его повторно во время построения дерева компонентов. Помещение bean-компонента в область просмотра и / или обеспечение загрузки модели данных в @PostConstruct bean-компонента (и, следовательно, не в методе получения!) Должно исправить это. См. Также Как с помощью ajax-refresh динамически включать содержимое с помощью меню навигации? (JSF SPA) .

  6. Атрибут визуализированного компонента и всех его родителей и атрибут test любого родительского элемента / не должно оцениваться как false во время фазы применения значений запроса запроса отправки формы. JSF перепроверит его как часть защиты от несанкционированных / взломанных запросов. Сохранение переменных, ответственных за условие, в bean-компоненте @ViewScoped или проверка правильности предварительной инициализации условия в @PostConstruct bean-компонента @RequestScoped должны почини это. То же самое относится к атрибуту disabled компонента, который не должен оцениваться как true на этапе применения значений запроса. См. Также Действие CommandButton JSF не запущено и Отправка формы в условно визуализированном компоненте не обрабатывается .

  7. Атрибут onclick компонента UICommand и атрибут onsubmit компонента UIForm не должны возвращать false или вызвать ошибку JavaScript. В случае или также не должно быть ошибок JS, видимых в консоли JS браузера. Обычно поиск точного сообщения об ошибке уже дает ответ. См. Также Добавление jQuery в PrimeFaces приводит к появлению Uncaught TypeErrors .

  8. Если вы используете Ajax через JSF 2.x или, например, PrimeFaces , убедитесь, что у вас есть в главном шаблоне вместо . В противном случае JSF не сможет автоматически включать необходимые файлы JavaScript, содержащие функции Ajax. Это приведет к ошибке JavaScript, например, «mojarra is not defined» или «PrimeFaces is not defined» в консоли JS браузера. См. Также h: commandLink actionlistener не вызывается при использовании с f: ajax и ui: repeat .

  9. Если вы используете Ajax, и отправленные значения оказываются равными null , убедитесь, что интересующие компоненты UIInput и UICommand покрыты с помощью или, например, , иначе они не будут выполнены / обработаны.См. Также Отправленные значения формы не обновляются в модели при добавлении в и Общие сведения о процессе / обновлении PrimeFaces и атрибутах выполнения / визуализации JSF f: ajax .

  10. Если отправленные значения по-прежнему имеют значение null , и вы используете CDI для управления bean-компонентов, убедитесь, что вы импортируете аннотацию области из правильного пакета, иначе CDI по умолчанию будет ] @Dependent , который эффективно воссоздает компонент при каждой оценке выражения EL. См. Также @SessionScoped bean теряет область видимости и постоянно воссоздается, поля становятся пустыми и Какая область действия управляемого компонента по умолчанию в приложении JSF 2?

  11. Если родительский объект ] с кнопкой UICommand предварительно отображается / обновляется запросом ajax, поступающим из другой формы на той же странице, тогда первое действие всегда будет терпеть неудачу в JSF 2.2 или более ранней версии. . Второе и последующие действия будут работать. Это вызвано ошибкой в ​​обработке состояния представления, которая сообщается как JSF spec issue 790 и в настоящее время исправлена ​​в JSF 2.3. Для более старых версий JSF необходимо явно указать идентификатор в рендере из . См. Также h: commandButton / h: commandLink не работает при первом щелчке, работает только при втором щелчке .

  12. Если имеет enctype = "multipart / form-data" , установленный для поддержки загрузки файлов, то вам необходимо убедиться, что вы использовать как минимум JSF 2.2, или что фильтр сервлета, который отвечает за синтаксический анализ запросов multipart / form-data, настроен правильно, иначе FacesServlet в конечном итоге не получит никаких параметров запроса и, следовательно, не сможет применить значения запроса. Как настроить такой фильтр, зависит от используемого компонента загрузки файлов. Для Tomahawk проверьте этот ответ , а для PrimeFaces ,проверьте этот ответ . Или, если вы на самом деле вообще не загружаете файл, полностью удалите атрибут.

  13. Убедитесь, что аргумент ActionEvent для actionListener является javax.faces.event.ActionEvent , а не java.awt.event. ActionEvent , который большинство IDE предлагает в качестве первого варианта автозаполнения. Отсутствие аргумента также неверно, если вы используете actionListener = "# {bean.method}" . Если вам не нужен аргумент в вашем методе, используйте actionListener = "# {bean.method ()}" . Или, возможно, вы действительно хотите использовать action вместо actionListener . См. Также Различия между action и actionListener .

  14. Убедитесь, что ни PhaseListener , ни какой-либо EventListener в цепочке запрос-ответ не изменили жизненный цикл JSF, пропустив этап вызова действия, например, вызвав FacesContext # renderResponse () или FacesContext # responseComplete () .

  15. Убедитесь, что ни один Фильтр или Сервлет в той же цепочке запрос-ответ каким-то образом не заблокировал запрос к FacesServlet .

  16. Если вы используете PrimeFaces или , убедитесь, что у них есть собственный . Потому что эти компоненты по умолчанию JavaScript перемещены в конец HTML .Итак, если бы они изначально сидели внутри , то теперь они больше не сидели бы в . См. Также p: действие commandbutton не работает внутри p: dialog

  17. Ошибка во фреймворке. Например, RichFaces имеет « ошибку преобразования » при использовании элемента пользовательского интерфейса rich: calendar с атрибутом defaultLabel (или, в некоторых случаях, ] rich: подэлемент заполнителя ). Эта ошибка предотвращает вызов метода bean-компонента, если для календарной даты не установлено значение. Ошибки фреймворка можно отслеживать, начав с простого рабочего примера и создавая резервную копию страницы до тех пор, пока ошибка не будет обнаружена.

Подсказки отладки

Если вы все еще зависаете, пора отладить. На стороне клиента нажмите F12 в веб-браузере, чтобы открыть набор инструментов веб-разработчика. Щелкните вкладку Консоль , чтобы увидеть консоль JavaScript. В нем не должно быть ошибок JavaScript. Ниже приведен снимок экрана с примером из Chrome, который демонстрирует случай отправки включенной кнопки без объявления (как описано в пункте 7 выше) .

js console

Щелкните вкладку Сеть , чтобы увидеть монитор HTTP-трафика. Отправьте форму и проверьте, соответствуют ли заголовки запроса, данные формы и тело ответа ожиданиям.Ниже приведен снимок экрана с примером из Chrome, который демонстрирует успешную отправку ajax простой формы с одним и одним с < f: ajax execute = "@ form" render = "@ form"> .

network monitor

(предупреждение: когда вы публикуете снимки экрана из заголовков HTTP-запросов, как указано выше, из производственной среды, убедитесь, что вы скремблируете / запутываете все файлы cookie сеанса на снимке экрана, чтобы избежать атак с захватом сеанса!)

На стороне сервера сделайте убедитесь, что сервер запущен в режиме отладки. Поместите точку останова отладки в метод интересующего компонента JSF, который, как вы ожидаете, будет вызван во время обработки отправки формы. Например. в случае компонента UICommand это будет UICommand # queueEvent () , а в случае компонента UIInput это будет UIInput # validate () . Просто выполните выполнение кода и проверьте, соответствуют ли поток и переменные ожиданиям. На скриншоте ниже показан пример отладчика Eclipse.

debug server

664
ответ дан 23 November 2019 в 00:44
поделиться
<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" /> <!--Working-->
    </p:dialog>
  </h:form>

  <h:form id="form2">
    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" /> <!--Not Working-->
    </p:dialog>
  </h:form>
</ui:composition>

Решить;

<ui:composition>  
  <h:form id="form1">
    <p:dialog id="dialog1">
      <p:commandButton value="Save" action="#{bean.method1}" />   <!-- Working  -->
    </p:dialog>

    <p:dialog id="dialog2">
      <p:commandButton value="Save" action="#{bean.method2}" />   <!--Working  -->
    </p:dialog>
  </h:form>
  <h:form id="form2">
    <!-- ..........  -->
  </h:form>
</ui:composition>
-2
ответ дан 23 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

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