developer tip

JSF 페이지에서 EL 변수 정의 및 재사용

copycodes 2020. 12. 29. 07:22
반응형

JSF 페이지에서 EL 변수 정의 및 재사용


변수를 정의하고 나중에 EL 표현식에서 변수를 재사용 할 수 있습니까?

예 :

<h:inputText 
   value="#{myBean.data.something.very.long}"
   rendered="#{myBean.data.something.very.long.showing}"
/>

내가 염두에 둔 것은 다음과 같습니다.

<!-- 
     somehow define a variable here like : 
     myVar = #{myBean.data.something.very.long} 
-->
<h:inputText 
   value="#{myVar}"
   rendered="#{myVar.showing}"
/>

어떤 아이디어? 감사합니다 !


<c:set>이를 위해 사용할 수 있습니다 .

<c:set var="myVar" value="#{myBean.data.something.very.long}" scope="request" />

이 EL 표현식은 한 번 평가되고 요청 범위에 저장됩니다. 이는 뷰 빌드 시간 동안 값을 사용할 수있는 경우에만 작동합니다 . 그렇지 않은 경우 scope속성 을 제거하여 진정한 "별칭"이되도록해야합니다.

<c:set var="myVar" value="#{myBean.data.something.very.long}" />

따라서 이것은 요청 범위에서 평가 된 값을 캐시 하지 않습니다 ! 매번 재평가됩니다.

마십시오 하지 사용 <ui:param>. 또는에 template정의 된대로에 매개 변수를 전달하기 위해 사용되지 않아 본질적으로이를 악용하면 동작이 지정되지 않으며 실제로 가능하다면 사용중인 JSF 구현의 버그가됩니다. 이것은 절대로 신뢰할 수 없습니다. JSF2 Facelets의 JSTL 도 참조하십시오 .<ui:composition><ui:decorate>


MVC의 다른보기와 마찬가지로 페이지는 가능한 한 단순 해야 합니다. 바로 가기를 원한다면 컨트롤러 ( @ManagedBean또는 @Named빈)에 바로 가기를 넣으십시오 .

제어 장치:

@Named
public MyBean
{
    public Data getData()
    {
        return data;
    }

    public Foo getFooShortcut()
    {
        return data.getSomething().getVery().getLong();
    ]
}

전망:

<h:inputText 
   value="#{myBean.fooShortcut}"
   rendered="#{myBean.fooShortcut.showing}"
/>

참조 URL : https://stackoverflow.com/questions/6434866/defining-and-reusing-an-el-variable-in-jsf-page

반응형