2

我正在使用复合材料实现自定义组件。我的复合组件的源代码如下:

<cc:interface componentType="selectOneRadio"
              xmlns="http://www.w3.org/1999/xhtml"   
              xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:attribute name="direction" default="next" />
</cc:interface>

如您所见,我不使用该implementation部分,但是如果我必须使用它对我来说没问题。

然后,我用 Java 渲染它的内容,如下所示:

public void encodeChildren(FacesContext context) throws IOException {
   ...
}

此控件将根据名称为“direction”的属性的值生成一个整数值。如果它的值为“next”,则生成的值为当月的当天加 1,如果它的值为“back”,则生成的值为当月的当天减 1。

我想知道当用户单击<h:commandButton />我在自定义组件之后添加的 a 时,如何将生成的值传递给支持 bean?

我需要使用<f:ajax />或类似的东西吗?

顺便问一下,我可以用 Java 渲染我的复合组件并<cc:implementation />同时(混合)吗?

谢谢。

4

1 回答 1

0

您需要在decode()方法中执行表单提交处理作业。

@Override
public void decode(FacesContext context) {
    // ...
}

ValueExpression您可以通过继承的getValueExpression()方法获取属性。您可以使用 执行“设置”操作ValueExpression#setValue()。例如

<my:composite ... value="#{bean.foo}" />

ValueExpression value = getValueExpression("value");
value.setValue(context.getElContext(), newValue);

将在 .newValue表示的属性上进行相应设置#{bean.foo}

于 2012-10-08T19:24:33.123 回答