1

vraptor4 プロジェクトがありapache velocity、テンプレート エンジンとして使用したいと考えています。

だから私はbr.com.caelum.vraptor.view.DefaultPathResolverasを専門にしました

@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.DefaultResultas を特化しました

@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速度テンプレートにコンポーネントを含めるためのより良いアプローチはありますか?

4

1 に答える 1