Prime Faces5.3でJSF2.2を使用しています。
動的オプションを使用してhtml5コンポーネントを作成しようとしています。目標は、f:selectItemsタグに似たものを作成することです
現時点では、datalistタグの次のコード(datalist.xhtmlファイル)があります
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:cc="http://xmlns.jcp.org/jsf/composite">
<cc:interface></cc:interface>
<cc:implementation>
<datalist id="#{cc.attrs.id}">
<cc:insertChildren/>
</datalist>
</cc:implementation>
</html>
単一のオプション(option.xhtmlファイル)の場合は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:cc="http://xmlns.jcp.org/jsf/composite">
<cc:interface>
<cc:attribute name="value" type="java.lang.String" default=""/>
<cc:attribute name="label" type="java.lang.String" default=""/>
</cc:interface>
<cc:implementation>
<option value="#{cc.attrs.value}" label="#{cc.attrs.label}"/>
</cc:implementation>
</html>
このアプローチで私はこのようなものを作成することができます
<myTag:dataList id="test">
<myTag:option value="1" label="label1"/>
<myTag:option value="2" label="label2"/>
<myTag:option value="3" label="label3"/>
</myTag:dataList>
しかし、オプションの動的リストを作成できるものが必要です。私は次のコード(または同様のもの)を書くことを期待しています
<myTag:dataList id="test">
<myTag:options value="#{myBean.myCollection}" var="mySingleObj" itemValue="mySingleObj.value" itemLabel="mySingleObj.label"/>
</myTag:dataList>
手伝って頂けますか?ありがとうございました!
<ui:repeat>
コレクションを反復処理するために使用できます。これが基本的な例です。
<ui:repeat value="#{bean.options}" var="option">
<option value="#{option.value}">#{option.label}</option>
</ui:repeat>
var
値式がvar
属性で許可されていないため、コンポジットでそれを宣言するだけでは注意が必要です。したがって、のようなことはできませんvar="#{cc.attrs.var}"
。そのためには、バッキングコンポーネントを作成し、<ui:repeat>
それにバインドし、postAddToView
イベント中に手動でvar
属性を評価してコンポーネントに設定する必要があります。
<cc:interface componentType="optionsComposite">
<cc:attribute name="value" />
<cc:attribute name="var" />
<cc:attribute name="itemValue" />
<cc:attribute name="itemLabel" />
</cc:interface>
<cc:implementation>
<f:event type="postAddToView" listener="#{cc.init}" />
<ui:repeat binding="#{cc.repeat}" value="#{cc.attrs.value}">
<option value="#{cc.attrs.itemValue}">#{cc.attrs.itemLabel}</option>
</ui:repeat>
</cc:implementation>
のcomponentType
属性に注意してください<cc:interface>
。@FacesComponent
値を参照する必要があります。
@FacesComponent("optionsComposite")
public class OptionsComposite extends UINamingContainer {
private UIComponent repeat;
public void init() {
repeat.getAttributes().put("var", getAttributes().get("var"));
}
public UIComponent getRepeat() {
return repeat;
}
public void setRepeat(UIComponent repeat) {
this.repeat = repeat;
}
}
これで、と同じように使用できます<f:selectItems>
。
<myTag:dataList id="test">
<myTag:options value="#{myBean.myCollection}" var="mySingleObj" itemValue="#{mySingleObj.value}" itemLabel="#{mySingleObj.label}" />
</myTag:dataList>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加