[英]pass a value from one @Viewscoped managed bean to another @Viewscoped managed bean
我有一個托管bean myBean1
,它具有以下方法:
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
將打開一個對話框, 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")){
所以我在該行上附加了調試器,得到了:
如您所見,變量selectedSalleOrAc
具有空值, selectedSalleOrAcId
具有字符串值。
因此,我將調試器附加到effacerJourDialog方法:
如您所見,當我將變量傳遞給對話框時,它們都同時包含selectedSalleOrAc
和selectedSalleOrAcId
,但是唯一的selectedSalleOrAcId
變量在effacerJour()方法中是已知的。
我該如何解決?
PS:我的兩個托管bean的作用域范圍
該解決方案僅用於:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.