所以我制作了一个复合组件FileAdder.xhtml
<composite:interface>
<composite:attribute name="type" value="#{editoriCompositeController.typeString}"/>
</composite:interface>
<composite:implementation>
<h:form>
<p:editor id="editor" widgetVar="editorWidget" value="some text" width="600" />
</h:form>
</composite:implementation>
然后我有了EditoriCompositeController ManagedBean:
@ViewScoped
@ManagedBean
public class EditoriCompositeController {
String typeString;
public void setTypeString(String typeStringParameter) {
this.typeString = typeStringParameter;
}
public String getTypeString() {
return typeString;
}
}
然后在我的fileattachmentsview.xhtml中我使用组件:
<owncomponents:fileadder type="MEMO" />
但是这并没有将支持bean中的typeString值设置为“MEMO”。它保持为null我用一个打印值的按钮测试它。
如何让backing bean获取typeString
的值我将复合组件的type
- 属性设置为“MEMO”?为什么它是null
而不是“备忘录”?
答案 0 :(得分:7)
您必须将目标bean / model作为另一个复合属性传递。然后你可以在复合内部使用<c:set>
来设置它的属性。
<cc:interface>
<cc:attribute name="bean" type="com.example.Bean" />
<cc:attribute name="type" type="java.lang.String" />
</cc:interface>
<cc:implementation>
<c:set target="#{cc.attrs.bean}" property="type" value="#{cc.attrs.type}" />
<p:editor value="#{cc.attrs.bean.text}" />
</cc:implementation>
用法:
public class Bean {
private String text;
private String type; // I suggest to make it an enum.
// ...
}
<h:form>
<your:composite bean="#{bean}" type="MEMO" />
<p:commandButton action="#{bean.submit}" />
</h:form>
请注意,我考虑了复合材料之外的形式。在复合材料中使用表单是不好的做法。
答案 1 :(得分:1)
我通过手动获取&#34;类型&#34;解决了这个问题。来自支持bean中的组件的属性:
String typeString = (String) component.getAttributes().get("type");