2012-09-21 5 views
3

이 질문을 많이 보았습니다. 그러나 아무도 적절히 응답하지 않았으므로 다시 물어보기로했습니다. 내가 A.xhtml에서 오전 경우 나는 관리되는 bean에서 ui : param 값에 액세스하는 방법

<ui:include src="B.xhtml"> 
    <ui:param name="formId" value="awesome Id"/> 
</ui:include> 

그래서 B.xhtml에, 나는 A.xhtml를 실행할 때이

<h:outputText value="#{formId}"/> 

, 내가 awesome Id가 화면에 인쇄되는 볼 것 할 수있다 :이가 이렇게합니다. 그렇지만 백킹 빈에서 formId의 값에 어떻게 액세스합니까? 나는 FacesContext.getCurrentInstance().getAttributes()FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()을 본다. 나는 그것을 찾을 수 없을 것 같다. 조금 더 나아가, 그래서 시도하려면

B.xhtml 내부, 지금 생각 나는 키 hiddenFormId 아래 RequestParameterMapformId의 값에 액세스 할 수 있다는 것입니다

<h:inputHidden id="hiddenFormId" value="#{formId}"/> 
<h:outputText value="#{formId}"/> 

있습니다. 그러나 나는이 지금 경우 : 내가 POST 요청 내부를 보면

<h:form id="myForm"> 
     <ui:include src="B.xhtml"> 
      <ui:param name="formId" value="awesome Id"/> 
     </ui:include> 
     <a4j:commandButton render="myForm" value="My Button"/> 
</h:form> 

그때 나는이 에로을 얻을 것입니다 (시 크롬 또는 FF 디버그 모드 내부)

<partial-response><error><error-name>class javax.faces.component.UpdateModelException</error-name><error-message><![CDATA[/B.xhtml @9,61 value="${formId}": /index.xhtml @27,61 value="awesome Id": Illegal Syntax for Set Operation]]></error-message></error></partial-response>

그래서 에게 접근하는 방법 UI : 관리 빈의 param 값?

+1

[이 질문은] (http://stackoverflow.com/questions/5394304/passing-values-with-uiparam-and-access-them-in-backing-bean) 당신과 비슷한 무엇입니까? – ElderMael

+0

@mael : 나는 지금 그의 코드를 시험하고있다. 그러나 내가 얻지 못하는 것들이있다. 당신이 그/그녀의 코드를 이해하면 좀 더 제발 좀 도와 줄래? 'hiddenValue'는 outputLabel의 id이고'UiTreeWalker'는 무엇입니까? –

답변

9

여기서 <ui:param>은 실제로 구현에 따라 달라집니다. 값을 사용할 지 여부를

FaceletContext faceletContext = (FaceletContext) FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY); 
String formId = (String) faceletContext.getAttribute("formId"); 

는 타이밍 그러나 될 수 있습니다 다음과 같이 인 Mojarra에서 그것은 당신의 백업 빈의 FaceletContext의 속성 때문에 가능으로 저장합니다. 포함의 렌더링을 실행하는 동안 보조 코드가 실행중인 경우 사용할 수 있으며 그렇지 않으면 null이됩니다.

MyFaces는 약간 다르게 수행하지만 더 이상 세부 정보를 기억하지 못하고 있으며 현재 소스를 가지고 있지 않습니다.

<h:inputHidden> 시도에 따르면 <h:inputHidden>은 양식 제출과 함께보기로 정의 된 숨겨진 매개 변수를 전달하는 유일한 목적으로 적합하지 않습니다. 대신에 일반 HTML을 사용하십시오.

<input type="hidden" name="hiddenFormId" value="#{formId}" /> 

정확하게이 이름을 가진 요청 매개 변수로 사용할 수 있습니다.

+1

BalusC에 감사드립니다. 제가 언급 한 것을 잊지 않는 작은 문제가 있습니다. 유효성 검사 단계에서 formId의 가치가 필요합니다. 그래서 FaceletContext에서 그 값에 접근 할 때, 그것은 null입니다.Previous : h : inputHidden을 사용하면이 정보가 내 RequestParameterMap에 표시되므로 올바른 값을 얻을 수 있지만 이 값은 내 유효성 검사 단계의 RequestParameterMap에서 더 이상 볼 수 없습니다. 왜 그런지, BalusC? –

+0

숨겨진 입력 값을 정확한 이름' "hiddenFormId"'로 얻었습니까? 이름에 양식 ID 접두어가 없다는 점에 유의하십시오. – BalusC

+0

오, 미안 해요, 작동합니다, 그것은'name = "hiddenFormId"'이지만'id = "hiddenFormId"'를 넣었습니다. 고맙습니다. –

관련 문제