2

我正在使用 JSP 和 Spring 框架。select在一个页面中,我希望在相应元素旁边有五个按钮。我的问题是如何避免为此重复代码?

这是我为一个按钮选择组合所拥有的代码:

       <tr>
            <td>
                <sf:label path="inputFile">Select a file:</sf:label>
            </td>
            <td>
                <sf:select path="inputFile" cssStyle="width: 250px;" onchange="enableLocal(this.selectedIndex,'matButton')">
                    <sf:option value="Upload a Local File" />
                    <sf:option value=" --- Available already: --- " disabled="true" />
                    <sf:options items="${flowData.availableInputs}" />
                </sf:select>
            </td>
            <td>
                <input id="matButton" type="file" name="inputFile"/>
            </td>
        </tr>

在上面的代码中,名称inputFilematButton将被视为参数,即其他按钮将具有不同的名称。

我想到的是类似于带有两个参数的函数,它会生成上述代码。可能吗?

4

2 回答 2

5

创建自定义 JSP 标记文件

/WEB-INF/tags/file.tag

<%@ tag body-content="empty" %>
<%@ attribute name="selectPath" required="true" type="java.lang.String" %>
<%@ attribute name="buttonId" required="true" type="java.lang.String" %>
<%@ taglib prefix="sf" uri="...???..." %>

<tr>
    <td>
        <sf:label path="${selectPath}">Select a file:</sf:label>
    </td>
    <td>
        <sf:select path="${selectPath}" cssStyle="width: 250px;" onchange="enableLocal(this.selectedIndex,'${buttonId}')">
            <sf:option value="Upload a Local File" />
            <sf:option value=" --- Available already: --- " disabled="true" />
            <sf:options items="${flowData.availableInputs}" />
        </sf:select>
    </td>
    <td>
        <input id="${buttonId}" type="file" name="inputFile"/>
    </td>
</tr>

(我不知道那个sftaglib 是什么,你必须自己完成它的 URI)

按如下方式使用它,file文件的基本文件名在哪里.tag

<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
...
<my:file selectPath="inputFile" buttonId="matButton" />
于 2012-09-20T13:54:04.940 回答
1

如上所述,您可以使用自定义标签jsp。然后,您可以在模型中的某处声明要使用的所有对 ( inputFile& ),并使用核心标签库 ( )。参考这个例子。这将遍历包含标签定义的集合(您可以从控制器进行所有这些操作)。matButton<c:forEach>

于 2012-09-20T14:11:09.070 回答