Richfaces 3.3.3, Jsf 1.2:
У меня есть a4j:form
, который использует простую проверку, в основном required="true"
, чтобы гарантировать, что форма не будет отправлена без каких-либо необходимых данных.
У меня также есть некоторые сложные данные для добавления (необязательно) в форму, поэтому я подумал, что лучший способ сделать это - иметь a4j:commandButton
, который отображает rich:modalPanel
, где пользователь может создать сложный набор данных.
Созданные данные также отображаются в h:selectManyListbox
, который перерисовывается при закрытии модальной панели.
Это план, по крайней мере. У меня следующие проблемы:
- reRender работает, но только если я запрещаю проверку через
immediate="true"
- что, в свою очередь, препятствует тому, чтобы выбранные данные из modalPanel присутствовали в компоненте поддержки
- если я удаляю немедленный тег, данные обновляются, но только если нет ошибок проверки
Каков наилучший способ заставить это работать так, как я хочу? Есть ли другой, лучший способ?
UPDATE:
Валидация, которая не проходит, находится в какой-то другой части формы, а не в данных, введенных через modalPanel, которая отображается в списке
КОД:
modalPanel:
<rich:modalPanel id="addTrimming" domElementAttachment="parent" width="150" height="130">
<f:facet name="header">
<h:panelGroup>
<h:outputText value="Define Filter" />
</h:panelGroup>
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<h:graphicImage value="/images/close.gif" styleClass="hidelink" id="hidelinkAddTrimming"/>
<rich:componentControl for="addTrimming" attachTo="hidelinkAddTrimming" operation="hide" event="onclick"/>
</h:panelGroup>
</f:facet>
<h:panelGrid id="trimsettings" columns="3">
<h:outputText value="Target:" style="font-weight:bold"/>
<h:inputText id="target" label="XML Filename" required="true" value="#{xmlCreator.trimTarget}">
</h:inputText>
<h:outputText value=""/>
<h:outputText value="Mode:"/>
<h:selectOneMenu value="#{xmlCreator.trimMode}">
<f:selectItem itemLabel="Quality" itemValue="quality"/>
<f:selectItem itemLabel="after Primer" itemValue="afterPrimer"/>
<f:selectItem itemLabel="fixed" itemValue="fixed"/>
<f:selectItem itemLabel="Median length" itemValue="median"/>
<f:selectItem itemLabel="Motif" itemValue="motif"/>
</h:selectOneMenu>
<h:outputText value=""/>
</h:panelGrid>
<h:panelGroup>
<a4j:commandButton value="OK" action="#{xmlCreator.createTrimming}" onclick="from:submit()">
<a4j:support event="oncomplete" ajaxSingle="true" immediate="true" reRender="trimsPanel"/>
</a4j:commandButton>
</h:panelGroup>
</rich:modalPanel>
соответствующая часть формы:
<h:outputText value="Trimming:"/>
<a4j:outputPanel id="trimsPanel">
<h:selectManyListbox id="trims" value="#{xmlCreator.selectedTrimmings}">
<f:selectItems value="#{si:toSelectTrimmingList(xmlCreator.trimmings)}"/>
</h:selectManyListbox>
</a4j:outputPanel>
<a4j:commandButton id="addTrimButton" immediate="true" value=" + Trimming">
<rich:componentControl for="addTrimming" attachTo="addTrimButton" operation="show" event="onclick"/>
</a4j:commandButton>