我有一个名为DeliveryPeriod
的数据对象,它是一个开始和结束日期的容器(保存为String
,如dd.MM.yyy,来自数据库)和另一个的id名为PlanningPeriod
的对象。此交付期应显示在JSF中自己的自定义组件中,如
<myc:deliveryPeriodComponent value="#{backendBean.deliveryPeriod}" />
我实现了一个DeliveryPeriodComponent
类UIInput
和一个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元素有所不同)
答案 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>