如何从自定义组件获取多个数据到后端bean?

时间:2012-01-24 15:59:21

标签: jsf-2 input decode custom-component

我有一个名为DeliveryPeriod的数据对象,它是一个开始和结束日期的容器(保存为String,如dd.MM.yyy,来自数据库)和另一个的id名为PlanningPeriod的对象。此交付期应显示在JSF中自己的自定义组件中,如

<myc:deliveryPeriodComponent value="#{backendBean.deliveryPeriod}" />

我实现了一个DeliveryPeriodComponentUIInput和一个DeliveryPeriodComponentRenderer extendes javax.faces.renderer。渲染效果很好,我看到两个日历元素和一个SelectOneMenu来选择计划周期。但渲染数据并非全部,我也需要更改数据。问题来了,我不知道将组件中的数据传递给后端bean。 decode()方法不知道新值,并且从不调用其他方法。我不知道诀窍,如何将JSF页面连接到bean,从教程(http://jsfatwork.irian.at,我买了这本书)我有getValue()和{{{{{}}这些方法。 1}}。

以下是组件的代码:

getConverter()

这是渲染器:

公共类DeliveryPeriodComponentRenderer扩展了渲染器{

public class DeliveryPeriodComponent extends UIInput {

public static final String COMPONENT_TYPE = "de.hacon.tps.integrator.web.component.deliveryperiod.DeliveryPeriodComponent";

enum PropertyKeys {
    begin, end, planningPeriod
}

public DeliveryPeriodComponent() {
    setRendererType("de.hacon.tps.integrator.web.component.deliveryperiod.DeliveryPeriodComponent");
}

public String getBegin() {
    return (String) getStateHelper().eval(PropertyKeys.begin, "01.01.2012");
}

public void setBegin(String begin) {
    getStateHelper().put(PropertyKeys.begin, begin);
}

public String getEnd() {
    return (String) getStateHelper().eval(PropertyKeys.end, "31.12.2012");
}

public void setEnd(String end) {
    getStateHelper().put(PropertyKeys.end, end);
}

public int getPlanningPeriod() {
    return (Integer) getStateHelper().eval(PropertyKeys.planningPeriod, 0);
}

public void setPlanningPeriod(int planningPeriod) {
    getStateHelper().put(PropertyKeys.planningPeriod, planningPeriod);
}}

也许这是一个微不足道的问题,我不是JSF的专业人士,仍然在学习。当你几乎对基础知识感到困惑时,很难编写自己的组件:-(每天都在学习新东西。谢谢你的帮助!

(我在定制组件上发现了很多,例如custum inputfields,这些组件运行良好并传输数据。不幸的是,我发现自定义组件中没有任何内容包含多个输入字段或者与现有JSF元素有所不同)

1 个答案:

答案 0 :(得分:-1)

在Html页面中使用

呼叫您的听众
<h:commandButton id="add" value="Add More" styleClass="input_right_cor" type="button">
                    <f:ajax execute="@this" listener="#{templateSearchHandler.AddRow}"  />
                </h:commandButton>