Это НЕ прямой ответ, а длинный подробный комментарий о том, что не так с этим вопросом и как реальную проблему можно просто сузить, сделав [mcve] ... с простым ответом в конце.
- Удалить композицию
- Удалить
h:outputScript
- Удалить все стили
- Удалить структурные
div
s panelGrid
и другие - Удалите «связки» с метки и сделайте их статичными
- Удалите большинство входных данных (оставьте один, чтобы он все еще демонстрировал проблему)
- Удалите большинство кнопок, которые открывают диалоговое окно иоставьте один (тот, на который вы ссылались), чтобы он все еще демонстрировал проблему
Как это могло бы выглядеть тогда
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:form id="ProductEditForm" target="_blank">
<p:commandButton id="CreateCategory1" actionListener="#{productCategoryController.prepareCreate(1)}" update="productGroups, ProductCategoryCreateForm" oncomplete="PF('ProductCategoryCreateDialog').show()"/>
<p:selectOneMenu id="category1" value="#{productController.selected.productCategoryId1}" label="Category 1">
<f:selectItem itemLabel="Select one" itemValue="#{null}" noSelectionOption="true" />
<f:selectItems value="#{productCategoryController.getItemsByLevel(1)}" var="item" itemLabel="#{item.name}"/>
<p:ajax event="change" update="productGroups" listener="#{productController.changeCategory(1)}"/>
</p:selectOneMenu>
<p:selectOneMenu id="category2" rendered="#{productController.selected.productCategoryId1 != null}" label="Category 2" value="#{productController.selected.productCategoryId2}" effect="fold">
<f:selectItem itemLabel="Select one" itemValue="#{null}" noSelectionOption="true" />
<f:selectItems value="#{productCategoryController.getItemsByLevel(2)}" var="item" itemLabel="#{item.name}"/>
<p:ajax event="change" update="productGroups" listener="#{productController.changeCategory(2)}"/>
</p:selectOneMenu>
</h:form>
</html>
Вы могли бы даже сделать это проще, используяобычный p:inputText
вместо p:selectOneMenu
с.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:form id="ProductEditForm" target="_blank">
<p:commandButton id="CreateCategory1" actionListener="#{productCategoryController.prepareCreate(1)}" update="productGroups, ProductCategoryCreateForm" oncomplete="PF('ProductCategoryCreateDialog').show()"/>
<p:inputText id="category1" value="#{productController.selected.productCategoryId1}" label="Category 1">
<p:ajax event="change" update="productGroups" listener="#{productController.changeCategory(1)}"/>
</p:inputText>
<p:inputText id="category2" rendered="#{productController.selected.productCategoryId1 != null}" label="Category 2" value="#{productController.selected.productCategoryId2}">
<p:ajax event="change" update="productGroups" listener="#{productController.changeCategory(2)}"/>
</p:inputText>
</h:form>
</html>
И если проблема все еще возникает h:inputText
с f:ajax
И даже h:commandButton
с f:ajax
(изменяя значение oncomplete наonevent), делая его менее зависимым от PrimeFaces (и при этомспойте ошибку).
Но теперь мы подходим к ней ... Неполное завершение диалога ... Это на самом деле связано с открытием диалога?Что если бы вы использовали простое oncomplete="alert('Hi there');
"в commandButton? Не получается ли это? 100% уверенность в этом, поэтому ваш заголовок
Открытие диалогового окна проверяет основную форму, что мне не нужно
и ваш вопрос
«Почему при открытии диалогового окна проверяется форма?»
Не правы оба ... Что, если вы полностью удалите oncomplete?По-прежнему не удается? Да ... Хмммм ... Так что это просто связано с нажатием кнопки. Что делает кнопка? Она отправляет форму ... проверяет ее ... Так что ваш вопрос фактически становится
«Как я могу запретить команде command отправлять и проверять всю мою форму»
И вы могли бы также прийти сюда, начав сначала удалять oncomplete, задавая себе вопрос:вопрос, связанный с заголовком:
"Это связано с открытием диалога?Что если я не открою диалог?Где мне это сделать?В конце, так что, если я уберу это ").
Если вы разместили свой новый вопрос в поисковой системе и добавили на него" PrimeFaces JSF site: stackoverflow.com ", выпосле некоторого прочтения нашла:
PrimeFaces отключить проверку при нажатии кнопки отмены
, что в точности соответствует заявлению. Может быть недостаточно (может потребоватьсядобавьте какой-нибудь другой идентификатор в атрибут process
полей, которые вы хотите отправить с помощью определенной кнопки, но тогда у вас будет более подробный вопрос к вопросу.
Вы, конечно, также можете сделать большечем одна форма, отправив меньшие части
Как использоватьна странице JSF?Одиночная форма?Несколько форм?Вложенные формы?