나는 vraptor4 프로젝트를 가지고 있으며 apache velocity
을 템플릿 엔진으로 사용하려고합니다. VRaptor4 @Named 속도 템플릿의 구성 요소
br.com.caelum.vraptor.view.DefaultPathResolver
잘 작동,하지만 난 내 템플릿
@Named
구성 요소를 가질 수 없습니다
@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";
}
}
있다.
@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;
}
}
나는 내 속도 템플릿 (.vm)에 ${mycmp.name}
로 참조 할 수 없습니다,하지만 난 그것을 잘 작동 .jsp를 사용하는 경우 가졌어요.
를 해결하기 위해 내가 전문 br.com.caelum.vraptor.core.DefaultResult
@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
구성 요소를 가지고위한 더 나은 방법이 있습니까?
첫 번째 솔루션으로 결과에 MyComponent를 추가 할 수 있습니다. 하지만 두 번째 솔루션이 어떻게 작동하는지 알지 못합니다. 두 번째 솔루션으로 MyComponent가 아닌 결과에 컨트롤러를 추가합니다. 아니면 뭔가 빠졌나요? – pbaris
죄송합니다. @pbaris. 방금 내 대답을 편집했습니다. 물론, 그 경우에는 전혀 실행되지 않을 것입니다. '@ Included' 또는 이와 비슷한 것을 담고있는 bean 만 직접 주입 할 수 있습니다. – Turini