我有一个 vraptor4 项目,我想apache velocity
用作模板引擎。
所以我专门化了br.com.caelum.vraptor.view.DefaultPathResolver
as
@Specializes
public class VelocityPathResolver extends DefaultPathResolver {
@Inject
protected VelocityPathResolver(FormatResolver resolver) {
super(resolver);
}
protected String getPrefix() {
return "/WEB-INF/vm/";
}
protected String getExtension() {
return "vm";
}
}
这工作正常,但我的模板中不能有@Named
组件。
有
@SessionScoped
@Named("mycmp")
public class MyComponent implements Serializable {
private static final long serialVersionUID = 1L;
private String name = "My Component";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我不能像${mycmp.name}
在我的速度模板 (.vm) 中那样引用它,但如果我使用 .jsp,它就可以正常工作。
为了解决它,我专门使用br.com.caelum.vraptor.core.DefaultResult
as
@Specializes
public class VelocityResult extends DefaultResult {
private final MyComponent mycmp;
@Inject
public VelocityResult(HttpServletRequest request, Container container, ExceptionMapper exceptions, TypeNameExtractor extractor,
Messages messages, MyComponent mycmp) {
super(request, container, exceptions, extractor, messages);
this.mycmp = mycmp;
}
@PostConstruct
public void init() {
include("mycmp", mycmp);
}
}
有没有更好的方法@Named
在速度模板中包含组件?