TLDによれば、タグフォーム:入力は空でなければならないが、そうではない
問題
Spring MVCフレームワークを使用した検索フォームの開発。
/WEB-INF/pages/tools/webserver.jsp – Spring mvc + formタグ
<form:form method="post" commandName="searchForm" action="${pageContext.request.contextPath}/tools/webserver/" class="navbar-form pull-left" id="search-form"> Type a website : <form:input path="domainName" type="text" width="165px" placeholder="example - google.com"/> <button type="submit" class="btn btn-top-margin">Search</button> </form:form>
スプリングコントローラ
@Controller @RequestMapping(value = "/tools", method = RequestMethod.GET) public class ToolsController { @RequestMapping(value = "/webserver", method = RequestMethod.GET) public ModelAndView main() { ModelAndView modelandView = new ModelAndView("tools/webserver", "searchForm", ""); return modelandView; } }
ページにアクセスすると、次のエラーメッセージが表示されます。
org.apache.jasper.JasperException:/WEB-INF/pages/tools/webserver.jsp(41,5) According to TLD, tag form:input must be empty, but is not org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:132) org.apache.jasper.compiler.Parser.parseBody(Parser.java:1603) org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:978) org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1246) org.apache.jasper.compiler.Parser.parseElements(Parser.java:1422) org.apache.jasper.compiler.Parser.parseBody(Parser.java:1634) org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:978) org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1246) org.apache.jasper.compiler.Parser.parseElements(Parser.java:1422) org.apache.jasper.compiler.Parser.parse(Parser.java:130) org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255) org.apache.jasper.compiler.ParserController.parse(ParserController.java:103) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185) org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
解決策
メッセージは誤解を招きます。実際は、
form:input、domainName`が空であることを意味します。フィールドにリンクする必要があります。これを修正するには、 `domainName`でオブジェクトを作成し、
@ Controller`クラスを介してリンクしてください。
public class SearchQuery { private String domainName; public String getDomainName() { return domainName; } public void setDomainName(String domainName) { this.domainName = domainName; } }
スプリングコントローラ
@Controller @RequestMapping(value = "/tools", method = RequestMethod.GET) public class ToolsController { @RequestMapping(value = "/webserver", method = RequestMethod.GET) public ModelAndView main() { ModelAndView modelandView = new ModelAndView("tools/webserver", "searchForm", new SearchQuery()); return modelandView; } }