4

Here my JSF page:

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

    <f:metadata>  
        <f:viewParam name="id" value="#{productDetailBean.id}" />  
    </f:metadata> 

    <h:head>
        <title>Facelet Title</title>
    </h:head>

    <h:body>
        <h:outputText value="1=#{productDetailBean.id}" />
        <br/>
        <h:outputText value="2=#{param['id']}" />
        <br/>
        <h:outputText value="3=#{productDetailBean.param}" />
    </h:body>
</html>

And bean

import java.io.Serializable;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@ViewScoped
public class ProductDetailBean implements Serializable{  

    private String id;  

    public String getParam(){
        FacesContext context = FacesContext.getCurrentInstance();
        Map<String, String> paramMap = context.getExternalContext().getRequestParameterMap();
        String projectId = paramMap.get("id");
        return projectId;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
} 

When i passing parameters like this: /getshipment.xhtml?id=123
i get output

1=
2=123
3=123

Second and third way are working fine. Why first one is not working ? And what is the correct way to get parameter ?

Aritz
  • 30,971
  • 16
  • 136
  • 217
Vololodymyr
  • 1,996
  • 5
  • 26
  • 45
  • So where are you actually populating the id property of the bean? – Gimby Feb 25 '14 at 15:32
  • `?id=123` in URL should set "123" value to ProductDetailBean.id And `` print this value, but nothing. – Vololodymyr Feb 25 '14 at 15:46
  • Let me rephrase: what part of your code actually puts the request parameter physically in the ID object property? The answer is: not any code is doing that. No wonder you get an empty value if you don't properly initialize it. – Gimby Feb 25 '14 at 15:55
  • `` shoud do all work , like shown [here](http://www.primefaces.org/showcase/ui/productDetail.jsf?productId=10) – Vololodymyr Feb 25 '14 at 16:03
  • ... wow, I need to have my eyes examined, my apologies. So the question is: why is that f:viewParam not doing what it is supposed to be doing. I'm afraid I have no answer. What happens when you put breakpoints or System.out.println() statements inside your getId() / setId() methods? EDIT: this may be relevant: http://stackoverflow.com/questions/18025508/jsf-does-fviewparam-only-pass-query-string-in-url-when-first-page-uses-the-same – Gimby Feb 25 '14 at 16:12
  • setId() just never calling – Vololodymyr Feb 25 '14 at 16:18
  • That link I added as an edit is of no help? – Gimby Feb 25 '14 at 16:25

1 Answers1

3

Try going with at least 2.2.2 with GlassFish 4. Prior 2.2.x Mojarra releases have well known compatibility issues with the new http://xmlns.jcp.org/jsf/ JSF namespaces.

See also:

Community
  • 1
  • 1
Aritz
  • 30,971
  • 16
  • 136
  • 217