我已经按照 this 教程在JSF 2.1
中实现了一个marquee-tag,并且部分成功了。由于此标记 NOT 支持动态数据e.g. #{bean.var}
作为值,因此我决定在组件内部执行此操作。
但是,重新加载页面后,该值将消失。标签仍在那里,但内容已经消失。
value-attribute
内使用我的动态值吗?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;
}
}
答案 0 :(得分:1)
评论太长了......
我不认为在@EJB
内注入@FacesComponent
是合法的,在这种具体情况下,我认为这不是一个好习惯。
我认为更好的方法应该是使用您自己的类扩展TextRenderer
,在faces-config中声明一个新组件,并以与使用h:outputText
相同的方式使用它(传递ValueExpression
in value
属性)