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

时间:2014-02-22 00:58:41

标签: java html jsf-2 tags

我已经按照 this 教程在JSF 2.1中实现了一个marquee-tag,并且部分成功了。由于此标记 NOT 支持动态数据e.g. #{bean.var}作为值,因此我决定在组件内部执行此操作。

但是,重新加载页面后,该值将消失。标签仍在那里,但内容已经消失。

  1. 您能告诉我如何正确实施,我可以在value-attribute内使用我的动态值吗?
  2. 或者,您是否会指出我的component class错误代码导致错误?
  3. 非常感谢!

    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;
    }
    

    }

1 个答案:

答案 0 :(得分:1)

评论太长了......

我不认为在@EJB内注入@FacesComponent是合法的,在这种具体情况下,我认为这不是一个好习惯。

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