我一直在試圖創建一個自定義的用戶界面組件jsf來代替<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");
}
,這是我的taglib:
<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來重現問題:
<h:form>
<h:selectOneMenu>
<mw:selectItemsForEnum />
</h:selectOneMenu>
</h:form>
我也一直在看組件樹:
<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>
如果我用<f:selectItems />
,而不是我的組件的我得到這個:
<UISelectItems id="j_idt9" inView="true" rendered="true" transient="false"/>
這實際上是什麼,我希望它看起來像,但我清楚必須忽視的東西很重要。
目標是爲selectItems提供一個標籤,您只需指定一個ID。然後,組件將使用該ID來查找數據庫中的枚舉值,然後創建這些枚舉的選項。但是如果只有呈現html,那麼這種方法可能是不可能的。 –
mokuril
你最好在模型中完成那項工作,而不是視圖。 – BalusC
這可能是真的,也許我應該堅持selectItems並創建一個我傳遞一個ID並返回SelectItem []的bean。感謝您的輸入! – mokuril