문제

저는 최근 JSF 작업을 시작했습니다. 그 전에는 항상 웹 개발에 PHP나 Python을 사용했습니다.

h:commandLink 태그가 사용될 때 JSF가 HTTP POST를 사용하여 탐색한다는 사실에 다소 놀랐습니다.

나는 JSF 앱을 ​​빌드하는 올바른 방법인 것처럼 commandLink를 사용해 왔습니다.JSF가 탐색을 위해 POST를 사용하는 이유는 무엇입니까?GET에 무슨 문제가 있나요?onclick 이벤트에 대해 JSF가 자동으로 생성한 Javascript가 GET 요청의 최대 길이를 초과할 수 있다고 가정할 수 있습니다.

h:commandLink를 사용하여 탐색되는 페이지가 이미 많이 있습니다.이것은 브라우저의 뒤로 버튼을 사용할 때까지 잘 작동합니다.JSF에서 뒤로 버튼을 어떻게 처리해야 합니까?

JSF가 POST를 중심으로 구축된 이유를 이해하려고 애쓰고 있습니다.북마크, 백페이징 및 검색 엔진에서 페이지 색인을 생성하는 기능이 중단됩니다.

도움이 되었습니까?

해결책

클라이언트에서 링크를 구축하는 데는 도움이 되지 않지만 다음 사항에 유의하세요. 출력링크.

일부 새로 고침 문제에 도움이 될 수 있는 탐색 규칙에 대한 리디렉션 요소가 있습니다.

<navigation-rule>
  <display-name>navBack</display-name>
  <from-view-id>/navBack.jsp</from-view-id>
  <navigation-case>
    <from-outcome>navTo</from-outcome>
    <to-view-id>/navTo.jsp</to-view-id>
    <redirect />
  </navigation-case>
</navigation-rule>

다른 모든 방법이 실패하면 다음 작업과 같이 리디렉션 URL을 직접 수행할 수 있습니다.

public String doAction() {
  System.out.println("Did some non-idempotent operation");
  FacesContext context = FacesContext.getCurrentInstance();
  ExternalContext extContext = context.getExternalContext();
  Application app = context.getApplication();
  ViewHandler viewHandler = app.getViewHandler();
  String url = viewHandler.getActionURL(context, "/navTo.jsp");
  url = url + (url.indexOf('?') < 0 ? '?' : '+') + "foo=bar";
  url = extContext.encodeResourceURL(url);
  try {
    extContext.redirect(url);
  } catch (IOException e) {
    throw new FacesException(e);
  }
  return null;
}

주의사항:URL을 올바르게 인코딩하고 있는지 기억이 나지 않습니다.

다양한 타사 라이브러리는 다양한 기능을 추가합니다.이 영역에서 JSF 2.0에서 어떤 작업이 수행되었는지는 확실하지 않지만 살펴볼 가치가 있을 것입니다.

다른 팁

예.JSF는 POST를 기반으로 구축되었으며 JSF의 가장 큰 문제점 중 하나입니다.북마크 가능한 GETable 페이지를 보려면 JAX-RS/Seam 또는 Spring을 살펴보세요.

BalusC가 그의 글에서 말했듯이 블로그, 페이지 간 탐색에는 GET을 사용해야 합니다.사용 h:outputLink 탐색용.

PostRedirectGetListener를 읽으면 뒤로/새로 고침 양식 다시 제출 확인 메시지가 해결됩니다.

다음을 추가하라고 조언합니다. beforePhase 부분적인 Ajax 처리를 처리하기 위해(해당하는 경우):

if(event.getFacesContext().getPartialViewContext().isAjaxRequest())
{
    return;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top