Jsf 2 @ManagedProperty初始化
我想将第一个属性ManagedBean“refCont”的选定值存储在托管bean的第二个属性中,然后发布。但在第二次选择后,该值将显示,知道显示的值是第一次选择的值。我不知道是什么缘故 .xhtmlJsf 2 @ManagedProperty初始化,jsf-2,primefaces,Jsf 2,Primefaces,我想将第一个属性ManagedBean“refCont”的选定值存储在托管bean的第二个属性中,然后发布。但在第二次选择后,该值将显示,知道显示的值是第一次选择的值。我不知道是什么缘故 .xhtml <h:outputText value="* Contact" /> <h:selectOneMenu id="contact" value="#{reclamationMB.refCont}" onchange="lazyload()"> <c:se
<h:outputText value="* Contact" />
<h:selectOneMenu id="contact" value="#{reclamationMB.refCont}" onchange="lazyload()">
<c:set value="#{reclamationMB.refCont}" target="#{contactMB}" property="refContt" />
<f:ajax listener="#{contactMB.affichReclContact}" />
<f:selectItem itemLabel="Select One" noSelectionOption="true" itemValue="---" />
<f:selectItems value="#{contactMB.contactsClient}" noSelectionValue="" var="contact" itemValue="#{contact.refCont}" itemLabel="#{contact.nomCont}" />
<f:selectItems itemLabel="Autre" itemValue=""></f:selectItems>
</h:selectOneMenu>
二熟豆
@RequestScoped
public class ContactMB extends AbstractMB implements Serializable {
@ManagedProperty("#{reclamationMB.refCont}")
private int refContt;
.....
//getter an setter
public void affichReclContact(AjaxBehaviorEvent event){
contact=service.AffichContact(refContt);
setContact(contact);
}
问题在于JSTL的
是一个视图构建时标记处理程序,而不是视图呈现时UI组件,因此您的问题是一个经典的问题:当您希望它设置值时,它不再存在于组件树中。此外,它在根本没有
标记的情况下运行
当然,如果
实现了ActionSource
,就像
一样,您可以嵌套JSF
,以便使用所需的值设置bean属性,如
中所示。但你不能那样做
基本上你可以做两件事:
标记,它可以保存上述操作侦听器以设置所需的值,并在onchange
方法中调用它。在堆栈溢出和优秀的PrimeFaces文档中,有很多这样的例子reclamationMB.getRefCont()
将始终在holder bean中产生正确的结果,前提是reclamationMB
是通过@ManagedProperty
保存注入bean的变量谢谢你的解释,但是我不能做第一个,因为我已经使用了我在这里称之为的
,我想我不能在同一次更改中调用两个
。第二个:我有一个错误,当我使用“bean injection”时,找不到property=“reclamationMB.refCont”
。首先,您可以调用几个远程函数,但这不是必需的,而且可能太贵。不过,您可以将/nest
添加到该
中。至于第二个,
只运行一次,所以您不能用它来解决您的问题>。相反,*注入整个bean来完成工作:@ManagedProperty(“{reclamationMB}”)private reclamationMB reclamationMB代码>使用getter/setter,在这种情况下,您不需要任何其他东西,以防注入的bean被及时初始化。很好,它可以工作,但是在第二个选择中。我注入整个豆子,然后添加
@RequestScoped
public class ContactMB extends AbstractMB implements Serializable {
@ManagedProperty("#{reclamationMB.refCont}")
private int refContt;
.....
//getter an setter
public void affichReclContact(AjaxBehaviorEvent event){
contact=service.AffichContact(refContt);
setContact(contact);
}