2016-04-01 36 views
0

Form doğrulamadan sonra seçili değerleri korumak istiyorum. Kodum burada:p: selectOneMenu form doğrulamasından sonra değer korunmuyor

i yanlış tarih yazıp Ara butonuna tıklayın ediyorum
<h:form id="advanceSearchForm"> 
    <p:dataGrid value="#{advancedSearchBean.selectedCriteriasList}" id="advancedSearchGrid" var="criteria" rowIndexVar="rowIndex" 
     columns="2" layout="grid" paginator="false" > 
     <h:panelGrid columns="1" id="criteriaPanel"> 
      <p:panel id="criteria"> 
       <div> 

        <!-- select criteria --> 
        <p:selectOneMenu value="#{criteria}" label="#{criteria.name}" 
          valueChangeListener="#{advancedSearchBean.addNewCriteria}" 
          converter="#{advancedSearchBean.criteriaConverter}"> 
           <f:selectItems value="#{advancedSearchBean.criterias}" 
            var="crt" 
            itemLabel="#{crt.name}" 
            itemValue="#{crt}" 
            itemDisabled="#{advancedSearchBean.disableItem(crt.id)}" /> 
           <f:ajax execute="@this"/> 
        </p:selectOneMenu> 

        <!-- launch date --> 
        <p:outputPanel rendered="#{criteria.id != null and (criteria.id == BusinessConstants.ADVANCED_SEARCH_FILTER_LAUNCH_DATE_ID)}"> 
          <p:outputPanel> 
           <h:outputText value="From" styleClass="passportLabel" /> 
           <p:inputMask required="true" id="launchStartDate" value="#{advancedSearchBean.launchStartDate}" mask="99/9999"> 
            <f:convertDateTime pattern="MM/yyyy" timeZone="#{sessionScope.identity.timezone}" /> 
            <p:ajax event="change" listener="#{advancedSearchBean.changeLaunchStartDate()}" /> 
           </p:inputMask> 
          </p:outputPanel> 
          <p:outputPanel> 
           <h:outputText value="To" styleClass="passportLabel" /> 
           <p:inputMask required="true" id="launchEndDate" value="#{advancedSearchBean.launchEndDate}" mask="99/9999"> 
            <f:convertDateTime pattern="MM/yyyy" timeZone="#{sessionScope.identity.timezone}" /> 
            <p:ajax event="change" listener="#{advancedSearchBean.changeLaunchEndDate()}" /> 
           </p:inputMask> 
          </p:outputPanel> 
        </p:outputPanel> 


       </div> 
      </p:panel> 
     </h:panelGrid> 
    </p:dataGrid> 

    <!-- run search button --> 
    <div> 
     <p:commandButton id="runAdvancedSearch" value="Run search" action="#{advancedSearchBean.doAdvancedSearch}" 
      update="advanceSearchForm:advancedSearchGrid"/> 
    </div> 
    </h:form> 

, benim doğrulama hata mesajı alıyorum ve ben de selectOneMenu seçili değeri kaybediyorum.

garip bir şey başka bir sayfaya yönlendirme ve bundan sonra geri geliyorum eğer, bunun çalışır ... Benim fasulye geçerli: In

@ManagedBean(name = "advancedSearchBean") 
@ViewScoped 
public class AdvancedSearchBean { 

private Map<Long, String> criteriaMap; 
private List<AutocompleteCriteria> criterias; 
private List<AutocompleteCriteria> selectedCriteriasList; 

@PostConstruct 
public void init() { 
    criteriaMap = BusinessConstants.ADVANCED_SEARCH_CRITERIA.entrySet().stream().sorted(Entry.comparingByValue()). 
      collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); 
    criterias = new ArrayList<AutocompleteCriteria>(); 
    for(Iterator<Map.Entry<Long, String>>it = criteriaMap.entrySet().iterator();it.hasNext();){ 
     Map.Entry<Long, String> entry = it.next(); 
     criterias.add(new AutocompleteCriteria(entry.getKey(), entry.getValue())); 
    } 
    criteriaConverter = new AutocompleteConverter(criterias); 
    selectedCriteriasList = new ArrayList<AutocompleteCriteria>(); 
    selectedCriteriasList.add(new AutocompleteCriteria(BusinessConstants.ADVANCED_SEARCH_FILTER_NO_CRITERIA, criteriaMap.get(BusinessConstants.ADVANCED_SEARCH_FILTER_NO_CRITERIA))); 
} 
+0

Yani bir h: selectOneMenu çalışır? Ve çoğaltmaya çalışmamızı isterseniz, lütfen bir [mcve] yayınlayın. Ayrıca hangi bilgilerin sağlandığı konusunda da [ask] ve http://www.stackoverflow.com/tags/jsf/info adresine bakınız. – Kukeltje

+0

h: selectOneMenu da çalışmıyor. Okumak için daha basit olması için kodu düzenledim, teşekkürler –

+0

hakkında 'basit' hakkında değil [mcve] – Kukeltje

cevap

0

senin p:selectOneMenu Sen value="#{criteria}" yerine value="#{advancedSearchBean.criteria}" var.

+0

ölçütü, value = "# {advancedSearchBean.selectedCriteriasList}" ve var = "ölçütleri" olan datagrid değişkenidir. –