Я использую Emacs 'nxhtml-mode
и mumamo
(multi-major-mode) для проверки (и использования автозаполнения и т. Д.) В режиме реального времени на странице XHTML, содержащей некоторый код JSTL.
Это работает, и мне действительно нравится то, что я вижу.
Я столкнулся с чем-то, что мне показалось интересным: возможно, я неправильно понимаю, что здесь происходит, поэтому я постараюсь описать как можно лучше, что происходит, и вы можете исправить меня.
По сути, у меня есть следующее в середине XHTML, которое в противном случае полностью проверяет:
<table>
<tr>
<c:forEach var="checkbox" items="${checkboxes}" varStatus="rowCounter">
<c:if test="${rowCounter.count % 4 == 0}">
</tr><tr>
</c:if>
<td>
<input type="checkbox" ...>
${checkbox.text}
</td>
</c:forEach>
</tr>
</table>
Теперь вышеприведенное не проверяется с использованием nxhtml. Мой Emacs говорит мне, в реальном времени:
-----... Hg:2588 [(nXhtml/jsp-nxhtml Invalid)]------
Поскольку «Обязательный дочерний элемент отсутствует» для первого закрывающего тега tr . Теперь это интересно, потому что я думаю, что счетчик начинается с одного (или может быть сделан так, чтобы начинаться с одного) и, следовательно, для валидатора невозможно «понять», что этот первый тег tr никогда не должен быть пустым.
Возможно, я ошибся в этом примере, но идея остается: у вас могут быть случаи, когда вы знаете, что он будет правильным, но когда валидатор не может сказать (насколько я могу судить).
Но что теперь произойдет, если я поменяю:
</tr><tr>
до:
<td></td></tr><tr>
Хорошо ... Теперь Emacs считает, что все в порядке.
Но это не так, потому что, если у вас есть кратные четыре записи, последняя строка будет пустым тегом .
Мне интересно знать две вещи:
как мне исправить этот конкретный пример? (вероятно, что, инвертировав , если , я смогу заставить его работать, еще не пробовал)
вы всегда можете исправить все такие случаи, которые могут появиться?
Я думаю, что это не связано с Java: это связано со смешением XHTML и Java / PHP / с чем угодно ... Если валидатор не способен понять, что делает программа (а мы знаем, что это невозможно), есть такие хитрые проблемы, как это что выскочит нет!?
Очевидно, я не хочу отказываться от огромных преимуществ, которые приносят проверка в реальном времени и контекстное автозаполнение ...
РЕДАКТИРОВАТЬ проблема на самом деле хуже, чем я думал. Конечно, вы можете иметь .jsp, который является правильно сформированным XHTML, но который производит вывод, который не правильно сформирован. Я думаю, что нет способа предотвратить это в режиме реального времени. Однако что-то может быть сделано, когда .jsp скомпилирован? Например, выдает ошибку, если замечает, что создаваемый XHTML не правильно сформирован?