2012-09-20 7 views
2

Я использую JSP и Spring framework. На странице я хочу иметь пять кнопок рядом с соответствующим элементом select. Мой вопрос в том, как я могу избежать повторения кода для этого?Избегайте дублирования кода в JSP

Вот код, у меня есть для одной кнопки, выберите комбинацию:

 <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> 

В приведенном выше коде, имена inputFile и matButton, подлежащие обработке в качестве параметров, то есть, другие кнопки будут иметь разные имена.

Что я имею в виду, это что-то вроде функции с двумя параметрами, которые генерируют вышеуказанный код. Является ли это возможным?

+1

Несвязанные, но вы не должны использовать ТАБЛИЦЫ для макетов. Используйте LABELS и переименованный неупорядоченный список. См. Http://www.alistapart.com/articles/prettyaccessibleforms –

ответ

5

Создать custom JSP tag file.

/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> 

(у меня нет ни малейшего представления, что это sf TagLib это, вы, чтобы завершить свой URI себя)

Используйте его следующим образом, где file является базовым именем файла .tag file:

<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %> 
... 
<my:file selectPath="inputFile" buttonId="matButton" /> 
+0

Нужно ли file.tag быть в/WEB-INF/tags? Или я могу также разместить его рядом с моими файлами jsp в WEB-INF/jsp? – Mahdi

+0

Путь свободен по вашему выбору. Не забудьте изменить 'tagdir' соответственно. Я бы рекомендовал не смешивать JSP-страницы и JSP-теги в той же папке, что и путаница для среднего исполнителя, соблюдающего стандартные соглашения. – BalusC

1

Как указано выше, вы можете использовать cu тег jsp. Затем вы можете объявить где-то в модели все пары (inputFile & matButton), которые вы хотите использовать, и использовать основные теги libs (<c:forEach>). См. Это example. Это приведет к переходу по вашей коллекции, содержащей определения меток (все эти действия вы можете сделать с контроллера).

Смежные вопросы