読者です 読者をやめる 読者になる 読者になる

この日記は私的なものであり、所属会社の見解ではありません。 GitHub: takahashikzn

Dynamic属性に必要なインタフェースを実装していません?

Struts2

こんなエラーが出てました。

org.apache.jasper.JasperException: /WEB-INF/content/mother_auth/login/input.jsp(58,6) s:submit タグはそれがdynamic属性を受け付けると宣言していますが、それに必要なインタフェースを実装していません
	at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:777)
	at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:840)
	at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:840)
	at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
	at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:840)
	at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)


なぜだろう…org.apache.struts2.views.jsp.ui.SubmitTagは、javax.servlet.jsp.tagext.DynamicAttributesを実装しているじゃないか。

なぜなんだーーー!!!



と叫ぶ直前で気がつきました。WEB-INF/libの下に、"jsp-api.jar"が紛れ込んでしまっていたことに。
WEB-INF/lib/jsp-api.jarのDynamicAttributesと、ServletコンテナのDynamicAttributesが異なるクラスローダーでロードされているために起きていたエラーなのでした。


クラスが無いとか、型が変だとか言われたときは、WEB-INF/libの下に、サーブレットコンテナが既に
ロード済みのクラスが混入していないかを、調べるといいと思います。たぶん。