jsf에 대한 사용자 정의 UI 구성 요소를 작성하여 <f:selectItems />
을 대체하려고했습니다.이 요소는 selectOneMenu에 래핑됩니다. 그래서 내 facesComponent는 selectOneMenu가 <select></select>
을 제공하는 동안 모든 옵션을 생성해야합니다.사용자 정의 jsf 요소 교체 <f : selectItems />
문제는 옵션이 selectOneMenu 내부에 렌더링되지 않고 바로 외부에 렌더링된다는 점입니다.
내 facesComponent은 다음과 같습니다
@FacesComponent(value = "be.mokuril.jsf.SelectItemsForEnum")
public class SelectItemsForEnum extends UISelectItems {
@Override
public void encodeAll(FacesContext facesContext) throws IOException {
ResponseWriter responseWriter = ResponsefacesContext.getResponseWriter();
responseWriter.startElement("option", null);
responseWriter.writeAttribute("value", 1, null);
responseWriter.write("option1");
responseWriter.endElement("option");
responseWriter.startElement("option", null);
responseWriter.writeAttribute("value", 2, null);
responseWriter.write("option2");
responseWriter.endElement("option");
}
을 그리고 이것은 내 태그 라이브러리입니다 :
<h:form>
<h:selectOneMenu>
<mw:selectItemsForEnum />
</h:selectOneMenu>
</h:form>
나는 또한했습니다 : 문제를 재현하는
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.0" id="mw"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
>
<namespace>http://www.mokuril.be/jsf/mw</namespace>
<composite-library-name>mw</composite-library-name>
<tag>
<tag-name>selectItemsForEnum</tag-name>
<component>
<component-type>be.mokuril.jsf.SelectItemsForEnum</component-type>
</component>
</tag>
그리고 XHTML 구성 요소 트리를보고 있습니다 :
중요한<UISelectItems id="j_idt9" inView="true" rendered="true" transient="false"/>
나는 그것을 같이 할 것으로 예상 실제로 무엇
,하지만 난 분명히 내려다 보이는해야 뭔가 : 내 구성 요소 대신 <f:selectItems />
를 사용하는 경우
<HtmlSelectOneMenu disabled="false" id="j_idt7" immediate="false" inView="true" localValueSet="false" readonly="false" rendered="true" required="false" transient="false" valid="true">
<SelectItemsForEnum id="j_idt8" inView="true" rendered="true" transient="false"/>
</HtmlSelectOneMenu>
은 내가이 얻을. UISelectOne
/UISelectMany
구성 요소가 UISelectItem(s)
instences 그들의 직접 아이들을 스캔하기 때문에
목표는 ID 만 지정해야하는 selectItems의 태그를 제공하는 것입니다. 그런 다음 구성 요소는 해당 ID를 사용하여 데이터베이스에서 열거 형 값을 조회 한 다음 해당 열거 형의 옵션을 만듭니다. 그러나 만 html을 렌더링하면이 방법은 불가능할 수 있습니다. –
mokuril
보기 대신 모델에서 해당 작업을 수행하는 것이 좋습니다. – BalusC
아마도 사실 일 것입니다. 아마도 selectItem을 사용하고 ID를 전달하고 SelectItem []을 반환하는 bean을 만들어야합니다. 귀하의 의견을 보내 주셔서 감사합니다! – mokuril