2013-01-03 4 views
1

URL을 통해 매개 변수를 전달하고이 매개 변수가 전달되거나 통과되지 않으면 특정 작업을 실행할 수 있습니다. JSF + Richfaces를 사용하고 있습니다.GET 요청 매개 변수를 ExternalContext에서 사용할 수 없습니다. # getRequestParameterMap()

예를 들어

내가 HTTP에 액세스하려고하면 : // localhost를/MyApp를/home.jsf

public class My Bean { 

private boolean printHello = false; 

public MyBean(){ 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    String printHello = fc.getExternalContext().getRequestParameterMap().get("printHello"); 
    if (printHello != null && printHello.equals("true") 
    printHello = true; 
} 

public void myFunction() { 
    if (printHello) 
    System.out.println("test"); 
    //other stuff 
    //ask for some user input 
} 

//When user validate his input, this function is called 
public void myFunction2() { 
    //some stuff 
} 

}

내가하여 myFunction()에서 사용자의 입력을 요구하고, 나는 또한이 내 페이지에서 모든 과정을 시작하는 링크. 해당 링크를 클릭 한 다음 수동으로 URL을 http : // localhost/myapp/home.jsf? printHello = true로 변경하면

빈이 지워지지 않고 내 printHello 플래그가 여전히 false로 설정됩니다. 또한

다음 다시 실행됩니다 :

FacesContext fc = FacesContext.getCurrentInstance(); 
String printHello = fc.getExternalContext().getRequestParameterMap().get("printHello"); 

printHello가 null이 될 것입니다, 내가 얻을 해달라고 이잖아. 어쩌면 모든 페이지가 다시 렌더링되지 않는다는 사실 때문일 수 있습니까?

+0

빈은 어떤 범위에 있습니까? 생성자가 매번 호출 되나요? 아마 당신은 몇 jsf xhtml 소스 코드를 게시 할 수 있습니까? – roel

답변

1

JSF2 처리 할 수 ​​있습니다, 여기에 두 개의 관련 질문입니다 당신은 (그들을 결합하여 백업 빈에) 매개 변수를 GET 처리해야하는 경우 <h:link><h:button> (check this page)를 사용하여 매개 변수를 GET :

  1. https://stackoverflow.com/a/7775203/141438
  2. https://stackoverflow.com/a/3355737/141438

또한 fc.getExternalContext(). getRequestParameterMap(). get ("printHello")가 작동하려면 코드를 @PostConstruct 주석으로 이동하십시오. d 메소드를 사용하여 backing bean이 적절한 범위를 가지는지 확인하십시오.

+0

정답이지만'fc.getExternalContext(). getRequestParameterMap(). get ("printHello")와 같이 sth를 볼 때 JSF를 버리는 것에 대해 생각하고 있습니다. –

관련 문제