Каждый браузер, который поддерживает XHTML (Firefox, Opera, Safari, IE9) поддерживает закрывающийся автоматически синтаксис на [1 139] каждый элемент .
,
,
все должны работать просто великолепно. Если они не делают, то Вы имеете HTML с неуместно добавленным XHTML DOCTYPE.
DOCTYPE не изменяется, как документ интерпретируется. Только тип MIME делает .
решение W3C об игнорировании DOCTYPE:
HTML WG обсудила этот вопрос: намерение состояло в том, чтобы позволить старым браузерам (только для HTML) принимать документы XHTML 1.0 следующим инструкции и обслуживание их как текст/HTML. Поэтому документы служили текстом/HTML, должен рассматриваться как HTML и не как XHTML.
Это - очень распространенная ошибка, потому что Блок проверки допустимости W3C в основном игнорирует то правило, но браузеры следуют за ним неукоснительно. Читайте HTML Понимания, XML и XHTML из блога WebKit:
На самом деле, подавляющее большинство, предположительно, документов XHTML в Интернете подается в качестве
text/html
. Что означает, что они не XHTML вообще, но на самом деле недопустимый HTML that’s продвигающийся на обработке ошибок синтаксических анализаторов HTML. Все те “Valid XHTML 1.0! В ссылках ” на сеть действительно говорится HTML 4.01 “Invalid! ”.
, Чтобы протестировать, есть ли у Вас реальный XHTML или недопустимый HTML с DOCTYPE XHTML, поместите это в свой документ:
If it's red, it's HTML. Green is XHTML.
Это проверяет, и в реальном XHTML это работает отлично (см.: 1 по сравнению с [1 115] 2 ). Если Вы не можете верить глазам (или не знайте, как установить типы MIME), откройте свою страницу через [1 116] прокси XHTML .
Другим способом проверить является источник представления в Firefox. Это выделит наклонные черты красного цвета, когда они будут недопустимы.
В HTML5/XHTML5 это не изменилось, и различие еще более ясно, потому что Вы даже не имеете дополнительными DOCTYPE
. Content-Type
король.
Для записи, спецификация XHTML позволяет любому элементу быть закрывающимся автоматически путем создания XHTML приложение XML: [шахта акцента]
Пустые теги элементов могут использоваться для [1 141] любой элемент, который не имеет никакого содержания , объявляется ли это с помощью ПУСТОГО ключевого слова.
Это также явно показывают в спецификация XHTML:
Пустые элементы должны или , имеют конечный тэг или тег запуска, должен закончиться
/>
. Например,или
Я иду с пользовательским резольвером видов, как предложено в комментариях. (и обновление моего приложения до весны 3.0.0)
.Альтернатива, которая не требует настройки в ViewResolver, может включать файл скорости верхнего уровня, а затем условный синтаксический анализ субфайлов, которые имеют что-то вроде следующего.
#if ($userAgent1)
#parse ("user-agent-1.vm")
#elseif ($userAgent2)
#parse ("user-agent-2.vm")
#end
Однако реализация создание нового или расширение существующего ViewResolver - довольно простое решение, и я бы пошел именно так.
Несколько месяцев назад у меня была такая же проблема!
В нашем мобильном проекте (с использованием Spring 2.5.6) мы закончили тем, что использовали перехватчик с нашим SimpleUrlHandler. Это перехватило все входящие запросы и добавило -m.jsp в конец любых мобильных запросов.
Это включало два шага:
1) объявление перехватчика для нашего стандартного URL Mapper:
<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- This interceptor catches all
requests and redirects them to portal
or mobile html content.
-->
<property name="interceptors"> <list>
<ref bean="MultiViewController"/> </list> </property>
и 2) реализация перехватчика, который искал слово «Мобильный» в пользовательском агенте.
public class MultiViewController extends HandlerInterceptorAdapter {
Я рассказываю об этом более подробно в своем блоге (о новом захватывающем мире мобильной веб-разработки) в сообщении: http://plumnash.com/it/iphone-web-development-using-spring/