>我按照本教程在JSF 2.1
中实现了选框标签,并取得了部分成功。由于此标签不支持动态数据,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;
}
}
太长了,无法发表评论...
我认为在@FacesComponent
体内注入@EJB
是不合法的,而且我认为在这种特定情况下这不是一个好的做法。
我认为更好的方法应该是使用您自己的类扩展TextRenderer
,在 faces-config 中声明一个新组件,并以与使用 h:outputText
相同的方式使用它(在 value
属性中传递ValueExpression
)