나는 JQuery와 - UI의 날짜 선택기에 의해 백업됩니다 복합 구성 요소 날짜 선택기 JSF를 쓰고 있어요 속성. I가 기능을 입수했습니다읽기/쓰기는 복합 구성 요소
(I 구성 요소 라이브러리를 사용하는 옵션이 없습니다) 작동하지만 이제 불필요한 특성을 제거하여 구성 요소의 인터페이스를 단순화하려고합니다.
내 구성 요소가 노출하는 특성 중 하나를 "값"이라고합니다. 구성 요소의 사용자가 예를 들어 el 참조를 제공 할 것으로 기대합니다. #{myCarBean.selectedCar}
주목해야 할 것은 구성 요소가 속성 값을 읽는 것만 보인다는 것입니다. 설정자는 결코 호출되지 않습니다.
나는이 방법을 clientBehaviour로 노출함으로써이 문제를 해결할 수있었습니다. 하지만 이제는이 clientBehaviour (값을 설정하기 위해)와 #{cc.attrs.values}
에서 값을 읽는 "value"속성을 통해 호출되는 actionListener가 있습니다.
사용 페이지에서 제공되는 기본 managedBean에 "value"속성을 읽고 쓸 수있는 단일 속성을 어떻게 가질 수 있습니까?
<ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:util="http://discovery.co.za/mytags" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface componentType="modal">
<cc:attribute name="value" type="java.util.Date" shortDescription="An El expression representing the managed bean field to which the selected date will be wired."></cc:attribute>
<cc:attribute name="minYear" type="java.lang.Integer" shortDescription="An El expression representing a managed bean field which should return an Integer indicating the year component of the minDate"></cc:attribute>
<cc:attribute name="minMonth" type="java.lang.Integer" shortDescription="An El expression representing a managed bean field which should return an Integer indicating the month component of the minDate.(January is 0)"></cc:attribute>
<cc:attribute name="minDay" type="java.lang.Integer" shortDescription="An El expression representing a managed bean field which should return an Integer indicating the day component of the minDate."></cc:attribute>
<cc:attribute name="maxYear" type="java.lang.Integer" shortDescription="An El expression representing a managed bean field which should return an Integer indicating the year component of the maxDate"></cc:attribute>
<cc:attribute name="maxMonth" type="java.lang.Integer" shortDescription="An El expression representing a managed bean field which should return an Integer indicating the month component of the maxDate"></cc:attribute>
<cc:attribute name="maxDay" type="java.lang.Integer" shortDescription="An El expression representing a managed bean field which should return an Integer indicating the day component of the maxDate"></cc:attribute>
<cc:attribute name="render" type="java.lang.String" />
<cc:clientBehavior name="change" targets="#{cc.clientId}:dateInput" event="change" />
</cc:interface>
<cc:implementation>
<div id="#{cc.clientId}">
<h:inputText id="dateInput" value="#{cc.attrs.value}" styleClass="jquery-datepicker"
onclick="modifyDatePickerOptions('#{cc.attrs.clientId}', #{cc.attrs.minYear}, #{cc.attrs.minMonth}, #{cc.attrs.minDay}, #{cc.attrs.maxYear}, #{cc.attrs.maxMonth}, #{cc.attrs.maxDay});">
<f:ajax execute="@form" event="change" render="#{cc.attrs.render}" />
</h:inputText>
</div>
</cc:implementation>
그리고 사용 페이지 :
<h:form id="datePickerForm">
<my:datepicker render=":datePickerForm:datePickerAjax" value="#{datePickerBean.selectedDate}" minYear="1999" minMonth="0" minDay="1" maxYear="2019" maxMonth="0" maxDay="1">
<f:ajax event="change" listener="#{datePickerBean.selectedDate}" />
</my:datepicker>
<h:panelGroup id="datePickerAjax" layout="block">
<br />
<b><h:outputText value="You selected : #{datePickerBean.selectedDate}" rendered="#{datePickerBean.selectedDate != null}" /></b>
</h:panelGroup>
</h:form>
호기심에서 벗어났다면 왜 _ : "(구성 요소 라이브러리를 사용할 수있는 옵션이 없음)"_ – Kukeltje
@Kukeltje : 프로젝트의 아키텍트는 컴포넌트 라이브러리에 의존하고 싶지 않다고 느꼈습니다. 새롭고 우수한 구성 요소 라이브러리가 항상 나오고 있으며 마이그레이션 오버 헤드를 원하지 않습니다. 그래서 저는 mojarra 2.1에 국한되었습니다. 그들은 적어도 나를 허용 한 omnifaces 비록 –
심지어 autoComplete 같은 간단한 구성 요소와 함께 그들은 예를 들어 사용하고 싶지 않아요. PrimeFaces.하지만 http://stackoverflow.com/questions/42834630/how-to-execute-client-behaviour-before-the-event-it-targets와 같은 맞춤형 복잡성을 원하십니까? 좋아 ... 데이터 테이블, 필터링, 페이징, 트리 테이블 및 기타 구성 요소 정렬과 함께 행운을 빈다 ;-) – Kukeltje