如何从backing bean返回值作为复合组件属性

时间:2014-09-12 20:59:37

标签: jsf composite-component

我有以下JSF复合组件:

<composite:interface componentType="myComp">
    <composite:attribute name="input" type="java.lang.Integer" />
    <composite:attribute name="output" type="java.lang.Integer" />
    <composite:attribute name="action" method-signature="java.lang.String action()"/>
</composite:interface>
<composite:implementation>
    <h:inputText id="input" value="#{cc.attrs.input}" />
</composite:implementation>

假设复合被调用为

<h:form id="form">
    <cc:myComposite id="cc" input="#{bean.input}" 
                    output="#{bean.output}" action="#{bean.action}"  />
</h:form>

调用bean.action后,它会在bean.output中设置一个值。我需要在我的javascript中访问此值,类似这样

document.getElementById('form:cc:output').value

从myComp我可以用

设置属性
getAttributes().put("output", output); 

但是数据存在于支持bean中。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要一个组件将“输出”值提交给辅助bean。使用inputHidden来完成此任务:

<composite:interface componentType="myComp">
  <composite:attribute name="input" type="java.lang.Integer" />
  <composite:attribute name="output" type="java.lang.Integer" />
  <composite:attribute name="action" method-signature="java.lang.String action()"/>
</composite:interface>
<composite:implementation>
  <h:inputText id="input" value="#{cc.attrs.input}" />
  <h:inputHidden id="output" value="#{cc.attrs.output}" />
</composite:implementation>

然后,您将能够通过javascript使用其隐藏的输入元素设置'output'值。