2016-08-19 3 views
0

У меня есть управляемый компонент myBean1, который имеет этот метод:передать значение от одного @Viewscoped управляемого компонента к другому @Viewscoped управляемого компонента

private String selectedSalleOrAc; 
private String selectedSalleOrAcId; 

public void effacerJourDialog(Object o){ 

     if(o instanceof Salle){ 
      this.selectedSalleOrAc = "1"; 
      this.selectedSalleOrAcId = ((Salle)o).getId() + ""; 
     } 
     if(o instanceof Appareil){ 
      this.selectedSalleOrAc = "2"; 
      this.selectedSalleOrAcId = ((Appareil)o).getId() + "";  
     } 

     Map<String, Object> options = new HashMap<>(); 
     options.put("modal", true); 
     options.put("resizable", false); 
     options.put("closable", true); 
     options.put("width", 660); 
     options.put("height", 700); 
     options.put("closeOnEscape", true); 
     options.put("contentWidth", 660); 
     options.put("contentHeight", 700); 
     // Affichage du dialogue 
     Map<String, List<String>> params = new HashMap<>(); 
     List<String> values = new ArrayList<>(); 
     values.add(this.selectedSalleOrAcId); 
     values.add(this.selectedSalleOrAc); 
     params.put("selectedSalleOrAcId", values); 
     params.put("selectedSalleOrAc", values); 
     RequestContext.getCurrentInstance().openDialog("/planningSalleAppareil/effacerJour", options, params); 
    } 

//Getters and Setters 

Так метод effacerJourDialog откроется диалоговое окном с двумя параметров передаются это (selectedSalleOrAcId и selectedSalleOrAc).

<f:metadata> 
    <f:viewParam name="selectedSalleOrAcId" value="#{myBean2.selectedSalleOrAcId}" /> 
</f:metadata> 

<f:metadata> 
    <f:viewParam name="selectedSalleOrAc" value="#{myBean2.selectedSalleOrAc}" /> 
</f:metadata> 

<ui:define name="menu"> 
    <p:menuitem onclick="$('#form\\:valider').click();" 
       value="#{messages.valider}" 
       icon="ui-icon-nouveau"/> 

    <p:menuitem action="#{myBean2.retour()}" 
       immediate="true" 
       value="#{messages.annuler}" 
       icon="ui-icon-supprimer" /> 


</ui:define> 

<ui:define name="content"> 
    <h:form id="form" styleClass="ui-panel-form" > 


     <p:growl id="messages" showDetail="true" showSummary="true"/> 


     <p:commandButton id="validerEffacerJour" 
         action="#{myBean2.effacerJour}" 
         update="messages"/> 

     <p:panel> 

      <p:panelGrid> 
       <p:row> 
        <p:column> 
         <h:outputLabel id="jour0" 
             for="jour" 
             value="#{messages.Jour}" /> 
        </p:column> 

        <p:column> 

         <p:selectOneMenu id="jour" 
             value="#{myBean2.jourAEffacer}" 
             required="true" 
             requiredMessage="Jour de la semaine : vous devez indiquer une valeur."> 
          <f:selectItem itemLabel="Selectionnez un jour" itemValue="" /> 
          <f:selectItem itemLabel="#{messages.Jour1}" itemValue="1" /> 
          <f:selectItem itemLabel="#{messages.Jour2}" itemValue="2" /> 
          <f:selectItem itemLabel="#{messages.Jour3}" itemValue="3" /> 
          <f:selectItem itemLabel="#{messages.Jour4}" itemValue="4" /> 
          <f:selectItem itemLabel="#{messages.Jour5}" itemValue="5" /> 
          <f:selectItem itemLabel="#{messages.Jour6}" itemValue="6" /> 
          <f:selectItem itemLabel="#{messages.Jour7}" itemValue="7" /> 
         </p:selectOneMenu> 
        </p:column> 
       </p:row> 

      </p:panelGrid> 

     </p:panel> 

    </h:form> 
</ui:define> 

Затем команда Кнопка validerEffacerJour будет вызывать метод effacerJour из myBean2:

private Integer jourAEffacer; 

    private String selectedSalleOrAc; 
    private String selectedSalleOrAcId; 


    public void effacerJour(){ 

     Object selectedObject = null; 

     if(selectedSalleOrAc.equals("1")){ 
      selectedObject = salleService.trouver(Integer.parseInt(selectedSalleOrAcId)); 
     } 
     else if(selectedSalleOrAc.equals("2")){ 
      selectedObject = appareilService.trouver(Integer.parseInt(selectedSalleOrAcId));  
     } 

     planningService.effacerJour(selectedObject, this.jourAEffacer); 
    } 

//Getters and setters 

Но я получаю NullPointerException в строке:

if(selectedSalleOrAc.equals("1")){ 

Так что я приложил dubugger к этой линии, и я получил это:

enter image description here

Как вы можете заметить, переменная selectedSalleOrAc имеет нулевое значение, а selectedSalleOrAcId имеет значение String.

Поэтому я приложил отладчик к методу effacerJourDialog:

enter image description here

Как вы можете видеть обе переменные selectedSalleOrAc и selectedSalleOrAcId, когда я передал их в диалог, но только selectedSalleOrAcId переменная известна в метод effacerJour().

Как я могу это решить?

PS: мои два управляемых фасоль вид области видимости

+0

Так что ваш вопрос эффективно: «Как я передаю значение из одного управляемого компонента '@ Viewscoped' в другой управляемый bean-элемент' @ Viewscoped', правильно? – Kukeltje

+0

@Kukeltje да thats it –

ответ

0

Решение было просто использовать:

<f:metadata> 
    <f:viewParam name="selectedSalleOrAcId" value="#{myBean2.selectedSalleOrAcId}" /> 
    <f:viewParam name="selectedSalleOrAc" value="#{myBean2.selectedSalleOrAc}" /> 
</f:metadata> 

Вместо:

<f:metadata> 
    <f:viewParam name="selectedSalleOrAcId" value="#{myBean2.selectedSalleOrAcId}" /> 
</f:metadata> 

<f:metadata> 
    <f:viewParam name="selectedSalleOrAc" value="#{myBean2.selectedSalleOrAc}" /> 
</f:metadata> 
Смежные вопросы