2012-09-26 49 views
2

我有以下格式的HTML標籤:Struts 2的文本字段標籤與屬性和沒有價值

<input type="text" name="username" id="username" placeholder="Enter your username" required> 

我想它由Struts標籤呈現轉換(以便驗證錯誤,頁面重新加載)由用戶輸入的值:

<s:textfield name="username" id="username" placeholder="Enter your username" required /> 

不幸的是,支柱拋出以下異常:

org.apache.jasper.JasperException: /index.jsp(58,110) PWC6212: equal symbol expected 
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:49) 
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:344) 
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:101) 
    at org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:220) 
    at org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:170) 
    at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1394) 
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1636) 
    at org.apache.jasper.compiler.Parser.parse(Parser.java:152) 
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:210) 
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:111) 
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:157) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:370) 
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:344) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:457) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:351) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:917) 
    at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:398) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185) 
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:217) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 

我在猜測Struts不喜歡「必需」沒有價值。我如何編輯我的Struts標籤來追加沒有值的「必需」文本?我們有一個現有的JavaScript庫,它依賴於「required」而不是「required =」「」或別的東西。

+0

你爲什麼不只是使用'input' – Jaiwo99

回答

4

您需要設置 「需要」 充分屬性:

<s:textfield ... required="required" /> 

這是JSP/XHTML是如何工作的,據我所知。

我無法想象JS庫會在乎是否有價值。

+0

文檔的每一位我所看到的狀態,這個屬性應該設置爲required =「true」 – Suipaste

+0

@Suipaste也許你錯過了HTML規範 - http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#boolean-attribute - 其中聲明「如果該屬性存在,則其值必須是空字符串,或者是屬性規範名稱的ASCII不區分大小寫的匹配值,且不包含前導或後綴空格。「和「**注意:**布爾屬性不允許使用值」true「和」false「。」 –

+0

剛做了一些大量的谷歌搜索,並找到背後的原因。在struts2 2.3.12之前,必需屬性需要使用required =「true」作爲屬性。然而,在此版本之後,struts2的必需屬性已更改爲requiredLabel以區分html5所需的屬性。我的意見是專門與reguards Struts2的,但事實證明是過時的。 來源 - https://code.google.com/p/struts2-jquery/issues/detail?id=967 – Suipaste

1

這是任何一個答案誰發現這個問題,並正在運行的Struts 2.3.12或更高 - 似乎有這種變化在網絡上的很少文檔...

2.3版本之前.12 struts2具有可以添加到輸入字段的必需屬性。該屬性純粹是根據需要標記該字段,並可用於通過使用.ftl文件在字段旁邊添加所需的星號/星號(例如) - 它未運行任何驗證。它可能看起來像這樣在你的代碼:

<s:textfield key="name" type="text" required="true"/> 

然而2.3.12版本之後所需要的屬性是與requiredLabel屬性替換。它的工作方式完全相同,可能如下所示:

<s:textfield key="name" type="text" requiredLabel="true"/> 

此更改是因爲引入了html5必需屬性。不過請注意,如果你想在struts2中使用它,目前你不能在沒有提供值的情況下使用它(因爲html5規範說你可以) - 這似乎打破了struts。因此,例如,這將不起作用:

<s:textfield key="name" type="text" required /> 

實際上,您將需要寫:

<s:textfield key="name" type="text" required="required" />