gpt4 book ai didi

jsf - FacesComponent 在一个页面中有效,但在其他页面中无效(从 ajax 事件中检索 null)

转载 作者:行者123 更新时间:2023-12-01 03:19:58 25 4
gpt4 key购买 nike

我不知道是否有解决的问题。如果是这样,我找不到它。

我正在创建一个复合组件,其中包含两个触发事件的 SelectOneMenu。
问题是该组件在一个 jsf 中有效,但在其他 jsf 中无效。

该组件位于三个不同的 xhtml 中。在所有这些事件中,当我更改第一个 SelectOneMenu 的值时都会触发事件,但只有在其中一个 xhtml 中,SelectItem 的值不为空。在其余的中,检索到的值为“null”

 //In p001DatosNotificacion.xhtml, it retrieves the selected value of the selectonemenu (b, for example)
//In the others it retrieves null

UISelectOne oneVoewl = (UISelectOne)event.getSource();
System.out.println("One Voewl > " + oneVoewl.getValue());

谁能帮助我并告诉我我在哪里犯了错误?

提前致谢!

编码

组件支持 bean
@FacesComponent(value="letterExample")
public class LetterExample extends UINamingContainer{

public void voewlAjaxListener(AjaxBehaviorEvent event){
UISelectOne oneVoewl = (UISelectOne)event.getSource();
System.out.println("One Voewl > " + oneVoewl.getValue());

}

复合组件 (注意:我使用现有的 bean 进行测试)
<cc:interface componentType="letterExample" >
<cc:attribute name="bean" type="es.ccasa.sgnx.business.bean.Direccion" />
</cc:interface>


<cc:implementation>

<p:selectOneMenu id="oneMenuVoewl" value="#{cc.attrs.bean.codigoPais}"
binding="#{cc.uiSelectOneVoewl}" >
<f:selectItem itemLabel="Aaaa" itemValue="a" />
<f:selectItem itemLabel="Eeee" itemValue="e" />
<f:selectItem itemLabel="Iiii" itemValue="i" />
<f:selectItem itemLabel="Oooo" itemValue="o" />
<f:selectItem itemLabel="Uuuu" itemValue="u" />
<p:ajax event="change" listener="#{cc.voewlAjaxListener}" update="consonantWrapper" />
</p:selectOneMenu>

<h:panelGroup id="consonantWrapper" layout="block">
<p:selectOneMenu id="oneMenuConsonant" value="#{cc.attrs.bean.codigoProvincia}"
binding="#{cc.uiSelectOneConsonant}">
<f:selectItem itemLabel="Bbbb" itemValue="b" />
<f:selectItem itemLabel="Cccc" itemValue="c" />
<f:selectItem itemLabel="Dddd" itemValue="d" />
</p:selectOneMenu>

</h:panelGroup>

</cc:implementation>

bean
public class Direccion implements Serializable {
private String codigoPais; /* with its getter and setter*/
private String codigoProvincia; /* with its getter and setter*/

}

XHTML
这是我在 xhtml 页面中使用的方式:( Controller 的名称更改取决于当前 Controller )
<sgnx:letter-example bean="#{controller.direccion}" />

@Named beans
@Named
@ViewScoped
public class P001DatosNotificacionController
private Direccion direccion; /* with its getter and setter*/

@Named
@ViewScoped
public class P001GestionNotificacionesController
private Direccion direccion; /* with its getter and setter*/

@Named
@ViewScoped
public class P002BandejaProvisionalNotificacionesController
private Direccion direccion; /* with its getter and setter*/

最佳答案

几周后,我又回到了这个问题上。
我决定从头开始。

当我开始编写 Controller 代码并使用 @ViewScoped 对其进行注释时,我意识到 javax.faces.beanjavax.faces.view包裹

这就是错误。我使用了错误的组合:

import javax.inject.Named;    
import javax.faces.bean.ViewScoped;

因此,解决方案就像使用正确的软件包组合一样简单:
import javax.inject.Named;
import javax.faces.view.ViewScoped;

在这些帖子中是答案和解释:
  • @ViewScoped bean recreated on every postback request when using JSF 2.2
  • ManagedProperty in CDI @Named bean returns null
  • Inject CDI bean into JSF @ViewScoped bean
  • 关于jsf - FacesComponent 在一个页面中有效,但在其他页面中无效(从 ajax 事件中检索 null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46282108/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com