programing

prependId="false" 중단이 있는 UI 양식

powerit 2023. 10. 25. 23:50
반응형

prependId="false" 중단이 있는 UI 양식

저는 그 사실에 숨겨진 생각에 대해 질문이 있습니다. 그것은 단지UIForm속성을 받았습니다.prependId. 특성이 에 지정되지 않은 이유는 무엇입니까?NamingContainer인터페이스? 는 호환성을 위한 하도록 하고 .이제 당신은 그것이 하위 호환성 때문이라고 말할 것입니다. 하지만 저는 호환성을 깨고 그 인터페이스를 구현하는 사용자들이 prependId에 대한 메소드도 구현하도록 하고 싶습니다.

에 내 .UIForm구성 요소는 파손된다는 것입니다.findComponent()만약 내가 사용한다면 나는 기대할 것입니다.prependId, 그 다음에NamingContainer렌더링뿐만 아니라 구성 요소 트리에서 구성 요소를 검색하려는 경우에도 동작이 변경됩니다.

간단한 예는 다음과 같습니다.

<h:form id="test" prependId="false">
  <h:panelGroup id="group"/>
</h:form>

이제 패널 그룹 구성 요소를 가져오려면 문자열을 전달해야 합니다."group"방법대로findComponent(), 아무 것도 못 찾겠어요, 전 사용해야 해요."test:group"대신.

그것의 구체적인 문제는, 아약스를 사용할 때와prependId="false"및이 컨테이너 지정에 신경 ajax 태그는 특성 업데이트 및 프로세스에서 값이 이름 지정 컨테이너를 중요하게 생각합니다.사용할 때가 좀 이상하네요.prependId="false"내가 전체 ID나 경로를 지정해야 한다는 것을. 하지만 알겠어요.

<h:form id="test" prependId="false">
  <h:panelGroup id="group"/>
</h:form>
<h:form id="test1" prependId="false">
  <h:commandButton value="go">
    <f:ajax render="test:group"/>
  </h:commandButton>
</h:form>

이 코드는 문제없이 렌더링되지만 패널 그룹을 찾을 수 없기 때문에 업데이트되지 않습니다.PartialViewContextID만 포함합니다."group"renderIds의 요소로 사용됩니다.예상되는 일인지는 모르겠지만, 아마 그럴 거예요. 하지만 코드를 모르겠어요.이제 우리는 그 방법이findComponent()매개 변수로 전달된 식을 다음과 같이 하여 구성 요소를 찾을 수 없습니다."group"그 방법이 기대하는 곳에서"test:group"구성 요소를 찾습니다.

한가지 해결책은 자신의 것을 쓰는 것입니다.findComponent()그게 제가 이 문제를 해결하기 위해 선택한 방법입니다.이 방법에서 나는 다음과 같은 구성요소를 취급합니다.NamingContainerprependId 속성이 일반적인 것처럼 false로 설정되어 있습니다.UIComponent. 나는 모든 사람들을 위해 그렇게 해야 할 것입니다.UIComponentprependId 속성을 제공하는 것은 나쁜 일입니다.성찰은 유형에 대한 정적인 정의를 벗어나는 데 도움이 되겠지만 여전히 진정한 해결책은 아닙니다.

다른 방법은 prependId 특성을 에 도입하는 것입니다.NamingContainer인터페이스 및 동작 변경findComponent()위와 같이 작업할 수 있습니다.

마지막으로 제안된 해결책은 id 전체를 전달하기 위해 ax 태그의 동작을 변경하는 것입니다. 그러나 이것은 ax 문제만 해결할 것이고 뒤에 있는 프로그래밍 문제는 해결하지 못할 것입니다.findComponent()실행.

그것에 대해 어떻게 생각하고 대체 왜 그렇게 시행되고 있는 것입니까?제가 처음으로 이런 문제를 겪었을 순 없지만 관련 주제를 찾지 못했다고요?!

UIComponent#findComponent()에 의해 행해진 바와 같이<f:ajax render>사용할 때 실패<h:form prependId="false">. 이 문제는 알려진 것으로 "수정하지 않음": JSF 사양 문제 573입니다.

나의 겸손한 의견으로는, 그들은 결코 추가하지 말았어야 했습니다.prependId에 귀속시키다UIFormJSF 1.2 시대에.그것은 단지 유지하기 위해 행해진 것입니다.j_security_checkJSF 입력 구성 요소가 포함된 JSF 양식을 사용하고 싶은 사용자가 행복합니다(j_security_check정확한 입력 필드 이름이 필요합니다.j_username그리고.j_password구성으로 수정할 수 없습니다.그러나 그들은 JSF 1.2 동안 계속 사용할 수 있는 또 다른 개선점이 있다는 것을 정확히 인지하지 못했습니다.<form>에 집착하는 대신에<h:form>. 그리고 CSS/jQuery 순수주의자들은 학대를 시작합니다.prependId="false"구분자를 벗어나는 것을 피하기 위해:그들이 잘 선택하지 못한 CSS 셀렉터에서.

사용하지 말 것prependId="false".. .

위해서j_security_check, 쓰임새만<form>또는 새로운 서블릿 3.0.HttpServletRequest#login(). j_security_check를 사용하여 Java EE/JSF에서 사용자 인증 수행을 참조하십시오.

CSS 셀렉터의 경우 ID 셀렉터가 꼭 필요한 경우(따라서 재사용 가능한 클래스 셀렉터가 아닌 경우), 관심 있는 구성요소를 일반 HTML로 랩핑하기만 하면 됩니다.<div>아니면<span>.

참고 항목:

언급URL : https://stackoverflow.com/questions/7415230/uiform-with-prependid-false-breaks-fajax-render

반응형