2016-04-01 12 views
0

フォームの検証後に選択した値を保持したい。私のコードはここにある:p:フォーム検証後に値を保持しないselectOneMenu

私は間違った日付を入力して検索ボタンをクリックしてくださいよ
<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> 

、私は私の検証エラーメッセージが出ていて、私もselectOneMenuで選択された値を失っています。

奇妙なことは、別のページにリダイレクトし、その後、私は戻って来ている場合は、それが動作することである...私のBeanは次のとおりです。で

@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

だから、h:selectOneMenuは機能しますか?私たちが複製しようと思えば、[mcve]を投稿してください。どの情報を提供するかについては[ask]とhttp://www.stackoverflow.com/tags/jsf/infoも参照してください。 – Kukeltje

+0

h:selectOneMenuも機能していません。私はコードを編集してより簡単に読むことができました。ありがとう –

+0

それは[シンプル]についてです。 – Kukeltje

答えて

0

あなたp:selectOneMenuあなたはvalue="#{criteria}"代わりのvalue="#{advancedSearchBean.criteria}"持っています。

+0

criteriaはvalue = "#{advancedSearchBean.selectedCriteriasList}"およびvar = "criteria"を持つデータグリッドからの変数です。 –

関連する問題