Интересная проблема проверки XHTML / JSTL - PullRequest
1 голос
/ 13 марта 2012

Я использую 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 считает, что все в порядке.

Но это не так, потому что, если у вас есть кратные четыре записи, последняя строка будет пустым тегом .

Мне интересно знать две вещи:

  1. как мне исправить этот конкретный пример? (вероятно, что, инвертировав , если , я смогу заставить его работать, еще не пробовал)

  2. вы всегда можете исправить все такие случаи, которые могут появиться?

Я думаю, что это не связано с Java: это связано со смешением XHTML и Java / PHP / с чем угодно ... Если валидатор не способен понять, что делает программа (а мы знаем, что это невозможно), есть такие хитрые проблемы, как это что выскочит нет!?

Очевидно, я не хочу отказываться от огромных преимуществ, которые приносят проверка в реальном времени и контекстное автозаполнение ...

РЕДАКТИРОВАТЬ проблема на самом деле хуже, чем я думал. Конечно, вы можете иметь .jsp, который является правильно сформированным XHTML, но который производит вывод, который не правильно сформирован. Я думаю, что нет способа предотвратить это в режиме реального времени. Однако что-то может быть сделано, когда .jsp скомпилирован? Например, выдает ошибку, если замечает, что создаваемый XHTML не правильно сформирован?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...