Diese Informationen in Verbundbauteil BeanInfo dem gespeichert ist, als Composite Component-Attribut, das voncodiert wird.
public static final String BEANINFO_KEY
Der Wert dieser Konstante als Schlüssel in der Komponente Attributabbildung verwendet wird, ist der Wert für die eine java.beans.BeanInfo
Implementierung der Verbundkomponente beschreibt. Diese BeanInfo
ist bekannt als die Verbundkomponente BeanInfo.
Die <cc:editableValueHolder>
schafft eine EditableValueHolderAttachedObjectTarget
Instanz im List<AttachedObjectTarget>
Eigenschaft des Verbundbauteils BeanInfo, die durch den Schlüssel AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY
verfügbar ist.
static final String ATTACHED_OBJECT_TARGETS_KEY
Der Schlüssel in dem Wertesatz der Verbundbauteils BeanDescriptor, ist der Wert für die ein List<AttachedObjectTarget>
.
Alles in allem sollte dies tun, um die txtText
zu bekommen:
<cc:interface componentType="yourComposite">
...
<cc:editableValueHolder name="txtText" />
</cc:interface>
<cc:implementation>
<f:event type="postAddToView" listener="#{cc.init}" />
<h:inputText id="txtText" ... />
...
</cc:implementation>
@FacesComponent("yourComposite")
public class YourComposite extends UINamingContainer {
public void init() {
BeanInfo info = (BeanInfo) getAttributes().get(UIComponent.BEANINFO_KEY);
List<AttachedObjectTarget> targets = (List<AttachedObjectTarget>) info.getBeanDescriptor().getValue(AttachedObjectTarget.ATTACHED_OBJECT_TARGETS_KEY);
for (AttachedObjectTarget target : targets) {
if (target instanceof EditableValueHolderAttachedObjectTarget) {
String name = target.getName();
UIInput txtText = (UIInput) findComponent(name);
// ...
}
}
}
}
sagte, dass das alles unnötig ungeschickt ist. Viel einfacher und die more canonical approach ist nur die untergeordnete Komponente direkt an die unterstützende Komponente zu binden.
<cc:interface componentType="yourComposite">
...
<cc:editableValueHolder name="txtText" />
</cc:interface>
<cc:implementation>
<h:inputText binding="#{cc.txtText}" ... />
...
</cc:implementation>
@FacesComponent("yourComposite")
public class YourComposite extends UINamingContainer {
private UIInput txtText; // +getter+setter
// ...
}
abrufen, wo? – Kukeltje
Holen Sie sich diese Informationen von 'component' selbst, ich würde mir etwas wie' component.getInterfaces(). Get ('editableValueHolder') 'vorstellen.Das Ziel davon ist, zu wissen, welche EditableValueHolder meine zusammengesetzten Ziele – Rapster
nicht abrufen, was, abrufen ** wo **, in einer Bean, Komponente Klasse, in der Komponente xhtml – Kukeltje