[英]pass a value from one @Viewscoped managed bean to another @Viewscoped managed bean
I have a managed bean myBean1
which has this method : 我有一个托管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
So the method effacerJourDialog
will open a dialog, with two parameters passed to it ( selectedSalleOrAcId
and selectedSalleOrAc
). 因此,方法
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>
Then the Command Button validerEffacerJour
will call the method effacerJour
from myBean2
: 然后将命令按钮
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
But I'm getting a NullPointerException in the line : 但是我在行中得到了NullPointerException:
if(selectedSalleOrAc.equals("1")){
So I attached a dubugger to this line and I got this : 所以我在该行上附加了调试器,得到了:
As you can notice the variable selectedSalleOrAc
has a null value and selectedSalleOrAcId
has a String value. 如您所见,变量
selectedSalleOrAc
具有空值, selectedSalleOrAcId
具有字符串值。
So I attached a debugger to the effacerJourDialog method : 因此,我将调试器附加到effacerJourDialog方法:
As you can see the both variables selectedSalleOrAc
and selectedSalleOrAcId
when I passed them to the dialog, but the only selectedSalleOrAcId
variable is known in the effacerJour() method. 如您所见,当我将变量传递给对话框时,它们都同时包含
selectedSalleOrAc
和selectedSalleOrAcId
,但是唯一的selectedSalleOrAcId
变量在effacerJour()方法中是已知的。
How can I solve this ? 我该如何解决?
PS : my two managed beans are view scoped PS:我的两个托管bean的作用域范围
The solution was just to use : 该解决方案仅用于:
<f:metadata>
<f:viewParam name="selectedSalleOrAcId" value="#{myBean2.selectedSalleOrAcId}" />
<f:viewParam name="selectedSalleOrAc" value="#{myBean2.selectedSalleOrAc}" />
</f:metadata>
Instead of : 代替 :
<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.