gpt4 book ai didi

java - JSF - selectItems 不会在列表内呈现列表

转载 作者:行者123 更新时间:2023-12-02 07:39:52 25 4
gpt4 key购买 nike

我有以下失败的 Facelet 代码:

<h:form>
<rich:select defaultLabel="Seleccionar región">
<f:selectItems value="#{StaticInfo.regiones}" var="region" itemValue="#{region.reg_Cod}" itemLabel="#{region.reg_Nombre}" />
<a4j:ajax event="change" render="provs" />
</rich:select>
<rich:select id="provs" defaultLabel="Seleccionar provincia">
<f:selectItems value="#{region.provincias}" var="prov" itemValue="#{prov.prov_Cod}" itemLabel="#{prov.prov_Nombre}" />
</rich:select>
</h:form>

支持 bean:

public class StaticInfoBean {

private ArrayList<Region> regiones;

public StaticInfoBean() {
try
{
RegionDAO regDao = new RegionDAO();
regDao.prepareConnection();
ProvinciaDAO provDao = new ProvinciaDAO();
provDao.setCon(regDao.getCon());
ComunaDAO comDao = new ComunaDAO();
comDao.setCon(regDao.getCon());
regiones = regDao.listaRegiones();
for(Region r : regiones)
{
regDao.findProvincias(r);
for(Provincia p : r.getProvincias())
{
provDao.findComunas(p);
for(Comuna c : p.getComunas())
{
comDao.findColegios(c);
}
}
}
regDao.getCon().close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}

public ArrayList<Region> getRegiones() {
return regiones;
}

public void setRegiones(ArrayList<Region> regiones) {
this.regiones = regiones;
}

public String toString() {
return regiones.toString();
}

}

区域:

public class Region {

private String Reg_Cod;
private String Reg_Nombre;
private ArrayList<Provincia> provincias;
//Getters and setters

问题:第一个 rich:select 标记工作得很好。但是第二个不显示任何值。不仅如此,我在 NetBeans 中工作,每当我在 EL 中键入“prov”时,它都不会显示类 Provincia 的方法列表。

感谢任何帮助。

编辑:我编辑了代码并执行了以下操作:

<h:form>
<rich:select defaultLabel="Seleccionar región" value="#{StaticInfo.regionElegida}">
<f:selectItems value="#{StaticInfo.regiones}" var="region" itemValue="#{region.reg_Cod}" itemLabel="#{region.reg_Nombre}" />
<a4j:ajax event="click" render="provs" execute="@this" />
<a4j:ajax event="click" render="texto" execute="@this" />
</rich:select>
<h:outputText id="texto" value="#{StaticInfo.regionElegida.reg_Nombre}" />
<rich:select id="provs" defaultLabel="Seleccionar provincia" value="#{StaticInfo.provinciaElegida}" rendered="#{not empty StaticInfo.regionElegida}">
<f:selectItems value="#{StaticInfo.regionElegida.provincias}" var="prov" itemValue="#{prov.prov_Cod}" itemLabel="#{prov.prov_Nombre}" />
</rich:select>
</h:form>

令人惊讶的是,outputText 没有被显示!为什么会出现这种情况?

最佳答案

f:selectItems 中设置的变量 region 仅在其范围内可用。您必须将每个 rich:select 绑定(bind)到一个支持 bean 属性。

因此,您需要更改 bean 代码,将所选区域的属性添加到 bean:

public class StaticInfoBean {    
private ArrayList<Region> regiones;
private Region regionElegida;
private Provincia provinciaElegida; // <-- you'll probably want this too...

// ... getters and setters and your initialization code

// and you need something to find the real region object that
// used the reg_Cod value got from rich:select, for now you can try this:
public void updateRegionElegida(AjaxBehaviorEvent e){
// set the chosen region to regionElegida,
// or the poor man's converter
for (Region region : regiones){
if(regionElegida.getReg_Cod() == region.getReg_cod()) {
regionElegida = region;
}
}
}
}

然后将您的 XHTML 更改为如下所示:

<h:form>
<rich:select value="#{StaticInfo.regionElegida}"
defaultLabel="Seleccionar región">
<f:selectItems value="#{StaticInfo.regiones}" var="region"
itemValue="#{region.reg_Cod}" itemLabel="#{region.reg_Nombre}" />
<a4j:ajax event="change" render="provs"
listener="#{StaticInfo.updateRegionElegida}" />
</rich:select>
<rich:select id="provs" value="#{StaticInfo.provinciaElegida}"
defaultLabel="Seleccionar provincia">
<f:selectItems value="#{StaticInfo.regionElegida.provincias}" var="prov"
itemValue="#{prov.prov_Cod}" itemLabel="#{prov.prov_Nombre}" />
</rich:select>
</h:form>

现在,进行转换的专业方法是使用自定义转换器,该转换器可以根据用于其选择小部件的表达式 itemValue 的值找到 Region 对象的适当实例。查看this example from another question .

请注意,rich:select 仅向默认 h:selectOneMenu 添加功能,您最好查看 its info page在SO这里。

关于java - JSF - selectItems 不会在列表内呈现列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11744876/

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