2

私はこのコードが非常に醜いことを発見しました:

<a href="<c:url value='/my/path/${id}.html'/>">Title</a>

の:

href="<c:url value=

と:

'/>">

部品。JSTL c:outと同じ仕事をする JSP EL から利用できる標準関数はありますか?

<a href="${f:context('/my/path/'.concat(id).concat('.html'))">Title</a>

またはそれ以上:

<a href="${f:context}/my/path/${id}.html">Title</a>
4

3 に答える 3

2

できるよ:

<c:url value='/my/path/${id}.html' var="myUrl"/>
<a href="${myUrl}">My Url</a>

これにより、タグmyUrlの式として使用できる変数に URL が格納されます。a

于 2013-07-04T10:55:59.333 に答える
2

またはより良い:

<a href="${f:context}/my/path/${id}.html">Title</a>

これは可能です:

<a href="${pageContext.request.contextPath}/my/path/${id}.html">Title</a>

<c:set>長い場合は、マスター テンプレートの上部にある別の場所でエイリアスを作成してください。

<c:set var="ctx" value="${pageContext.request.contextPath}" scope="request" />

他の場所で使用できるように

<a href="${ctx}/my/path/${id}.html">Title</a>

以下も参照してください。

于 2013-07-04T11:55:55.763 に答える
1

このフィールドに関する私の研究は、 web.xmlの独自の EE フィルターにctxパラメーターを配置できることを示しました。

<filter>
    <filter-name>ctxFilter</filter-name>
    <filter-class>org.my.web.filter.CtxFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ctxFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

と:

public class CtxFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) { }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setAttribute("CTX", request.getServletContext().getContextPath());
        chain.doFilter(request, response);
    }
    @Override
    public void destroy() { }
}

またはSpringインターセプター(私のプロジェクトフレームワークスタックに基づく)。また、これは次の方法でも実行できます。

<spring:url value="/" var="ctx" htmlEncoding="true"/>
<a href="${ctx}/path/...">...</a>

またはとして:

<c:url value="/" var="ctx"/>
<a href="${ctx}/path/...">...</a>

ただし、これらの例の最初の行は、JSP ファイル間で複製する必要があります。

最後に、適切な関数WEB-INF/tlds/ctx.tldを使用して TDL ファイルを実装できます。

<function>
    <name>ctx</name>
    <function-class>org.my.web.Ctx</function-class>
    <function-signature>java.lang.String getCtx()</function-signature>
</function>

参照:

于 2013-07-04T11:01:01.727 に答える