ここでコメントを少し拡張します。JSFは通常のWebフレームワークではありません。これは、コンポーネントベースのWebフレームワークです。GWT、Vaadin、Echoなどもそうです。それらを使用すると、XHTML strictを生成しないと、簡単に回避できません。(必要に応じて、JSFでコンポーネント/レンダラーを変更できます)
一方、Spring-MVC、Struts、Grailsなどのフレームワークは、アクションベースのWebフレームワークです。固有の部品としてのコンポーネントはありません。はい、それらは便利なタグライブラリを提供しますが、厳密なxhtmlを生成できない場合は、それらなしで使用できます。たとえば、を使用できますが、適切なとを<form:input>
使用して設定することもできます。<input type="text" />
name
value
アクションベースのフレームワークのほとんどは、ビュー内のフロー制御(JSP)をJSTLに依存しています。したがって、スクリプトレットはありません。ただし、JSTL自体はマークアップをレンダリングしません。したがって、JSTL +手書きのマークアップを使用して、XHTMLstrictを生成できます。
使用されるタグライブラリは別の話です。たとえば、カレンダーが必要な場合は、taglibを使用できますが、適切なxhtmlがレンダリングされない場合があります。ただし、jQueryカレンダーを使用することもできます。アクションベースのフレームワークの場合、違いはそれほど大きくありません。
そうは言っても、私はSpring-MVCとGrailsの経験があり、それらを使用できます。これらを使用すると、生成されたマークアップをきめ細かく制御できます。