Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 无法访问JSF支持bean中的GET参数_Jsf 2_Managed Bean - Fatal编程技术网

Jsf 2 无法访问JSF支持bean中的GET参数

Jsf 2 无法访问JSF支持bean中的GET参数,jsf-2,managed-bean,Jsf 2,Managed Bean,我无法访问支持bean中的参数。example.xhtml文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.or

我无法访问支持bean中的参数。example.xhtml文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core">

<f:metadata>
   <f:viewParam name="id" value="#{myBackingBean.unitId}" />
   <f:viewAction action="#{myBackingBean.findUnits}" />
</f:metadata>

<head>
<title>Example Title</title>
</head>
<body>
I found #{myBackingBean.units.size()} units.
</body>
</html>

示例标题
我找到了#{myBackingBean.units.size()}个单位。
我的理解是,当我得到example.jsf?id=3时,jsf调用myBackingBean.setUnitId(3)。对吗

这是MyBackingBean:

@Model
public class MyBackingBean {

    private static Logger logger = Logger.getLogger(MyBackingBean.class
            .getName());

    //@ManagedProperty("#{param.id}")
    private Long unitId;

    @Inject
    private IExampleEJB myExampleEjb;

    private List<Unit> units;

    @PostConstruct
    public void postConstruct() {
        Map<String, String> mymap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

        for (String k:mymap.keySet()) {
            logger.info(String.format("%s %s", k,mymap.get(k)));
        }
    }

    public void findUnits() {   
        logger.info(String.format("MyBackingBean findUnits %d", unitId));
        units = myExampleEjb.findUnits();
    }

    public List<Unit> getUnits() {
        return units;
    }

    public void setUnits(List<Unit> units) {
        this.units = units;
    }

    public Long getUnitId() {
        return unitId;
    }

    public void setUnitId(Long unitId) {
        this.unitId = unitId;
    }
}
@模型
公共类MyBackingBean{
私有静态记录器=Logger.getLogger(MyBackingBean.class
.getName());
//@ManagedProperty(“#{param.id}”)
私人长单位;
@注入
私有IEXamplejb MyExamplejb;
私人名单单位;
@施工后
施工后公共空间(){
Map mymap=FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
for(字符串k:mymap.keySet()){
logger.info(String.format(“%s%s”,k,mymap.get(k));
}
}
public void findUnits(){
info(String.format(“MyBackingBean findUnits%d”,unitId));
units=myExamplejb.findUnits();
}
公共列表getUnits(){
返回单元;
}
公共单位(列出单位){
这个。单位=单位;
}
公共长getUnitId(){
返回unitId;
}
公共无效集合ID(长集合ID){
this.unitId=unitId;
}
}
id参数位于postConstruct()中的参数请求映射中

在我的例子中,永远不会调用setUnitId(),findUnits()也不会调用


在另一个不同但相关的问题中,@ManagedProperty(当前已注释掉)也不起作用。

给定
xmlns.jcp.org
名称空间,您使用的是JSF 2.2。早期的Mojarra 2.2.0和2.2.1版本有一个已知的bug,导致
无法工作

根据评论,您正在使用GlassFish 4.0。如果您没有升级其捆绑的JSF实现,因此使用的是早期的Mojarra版本2.2.0,那么您肯定会遇到这个错误,需要升级

你可以从我这里得到这个罐子。您只需将GlassFish的
/modules
文件夹中的
javax.faces.jar
文件替换为新版本

另见

我应该提到我在Glassfish 4中跑步。将调用FacesServlet。当我将数据访问放在PostConstruct中(并手动设置unitId)时,它工作了,结果显示在呈现的html中。您是否在GF4中升级了Mojara?不接着,问题通过升级Mojarra解决了。谢谢