JSF - 自定义标记 - 动态值在刷新后消失



>我按照本教程JSF 2.1中实现了选框标签,并取得了部分成功。由于此标签不支持动态数据,e.g. #{bean.var}作为值,我决定在组件内部将其弄脏。

但是,重新加载我的页面后,该值消失了。标签仍然存在,但内容已消失。

  1. 你能告诉我如何正确实现,我可以在value-attribute中使用我的动态值吗?
  2. 或者你会指出我正确的方向,哪个代码导致我的component class错误?

谢谢!

http://myjavabuddy.blogspot.de/2013/04/writing-custom-components-for-jsf-20.html

这是我的JSF

<customJSF:marquee value="" />

这是我的组件

@FacesComponent ("amelunxenfast.prog3.wissensmanagement.components.marquee")
public class MarqueeComponent extends UIComponentBase {
  public static final String COMPONENT_TYPE = "com.himanshu.jsf.custom.marquee";
    String value = null;
    @EJB
    FeedEJB ejb;
    public String getValue() {
        return value;
    }
    @Override
    public String getFamily() {
        return COMPONENT_TYPE;
}
@Override
public void encodeBegin(FacesContext context) throws IOException {
    ResponseWriter writer = context.getResponseWriter();
    writer.startElement("marquee", this);
    writer.writeAttribute("scrollamount", "10", "");
    writer.write(ejb.getFeedString());
    writer.endElement("marquee");
}

@Override
public void encodeEnd(FacesContext arg0) throws IOException {
    super.encodeEnd(arg0);
}
public void setValue(String value) {
    this.value = value;
}

}

太长了,无法发表评论...

我认为在@FacesComponent体内注入@EJB是不合法的,而且我认为在这种特定情况下这不是一个好的做法。

我认为更好的方法应该是使用您自己的类扩展TextRenderer,在 faces-config 中声明一个新组件,并以与使用 h:outputText 相同的方式使用它(在 value 属性中传递ValueExpression

最新更新