无法访问JSF辅助bean中的GET参数

时间:2013-11-20 17:06:48

标签: jsf-2 managed-bean

我无法访问辅助bean中的GET参数。 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>

我的理解是,当我获取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;
    }
}

id参数位于postConstruct()中的参数请求映射中。

就我而言,从不调用setUnitId(),也不调用findUnits()。

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

1 个答案:

答案 0 :(得分:0)

鉴于xmlns.jcp.org命名空间,您使用的是JSF 2.2。早期的Mojarra 2.2.0和2.2.1版本有一个已知的错误导致<f:viewParam>不起作用。

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

您可以从http://javaserverfaces.java.net获取JAR。您需要做的就是使用较新版本替换GlassFish的javax.faces.jar文件夹中的/modules文件。

另见