2014-10-08 30 views
0

這是一個Spring Web MVC項目,我在服務器端進行輸入驗證。如果有任何錯誤,那麼在將它發送到視圖之前將其添加到模型中。爲什麼<c:if>語句不能在jsp中執行?

控制器

@Controller("resultController") 
public class ResultController { 

    private final ResultService resultService; 

    @Autowired 
    public ResultController(ResultService resultService) { 
     this.resultService = resultService; 
    } 

    // @RequestMapping(value = "/search", method = RequestMethod.GET) 
    @RequestMapping(value ="/template", method = RequestMethod.GET) 
    public String getPersonList(ModelMap model) { 
     System.out.println("We are coming into this place"); 
     return "header"; 
    } 


    @RequestMapping(value = "/number", method = RequestMethod.POST, params = { "regNo" }) 
    public String getStudentResult(@RequestParam(value = "regNo", required = true) String regNo, ModelMap model){ 

     //Server side validation 
     if(regNo.equals(null) || regNo.isEmpty()){ 
      model.addAttribute("nullValue", "Register Number field cannot be empty"); 
      return "header"; 
     }else if(regNo.length() != 12){ 
      System.out.println("This Sys out is shown"); 
      model.addAttribute("invalidLength", new String("invalid")); 

      return "header"; 
     }else{ 

      model.addAttribute("studentResult",resultService.getStudentResult(regNo));  
      return "numberResult";  
     } 
    } 
} 

header.jsp中

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

<head> 
<script src="http://code.jquery.com/jquery.min.js"></script> 
    <style> 
     #mycontainer, h1, h3 { 
      text-align:center; 
     } 
     form { 
      display:inline-block; 
     }  
    /* #regNoErrorMsgNumber { 
      display: none; 
      background: brown; 
      color: white; 
     } */ 
    </style> 

</head> 
<body> 

<div id="mycontainer"> 
    <form method="post" action="number" id="number"> 
    <!-- <div id="regNoErrorMsgNumber">Only numbers are allowed</div> --> 
      <div style="text-align: center;" > 
        <!-- //TODO: Only number, no spaces, no special symbol and 12 digit check-->     

         <input width="20" type="text" data-validation="numbers" id="regNo" name="regNo" size="30" maxLength="50" placeholder="Enter Register Number"> <b>OR</b>  
         <div> 
          <c:if test="${not empty nullValue}"> 
           <c:out value="${nullValue}"/> 
          </c:if> 


          <c:if test="${not empty invalidLength}"> 
           <c:out value="Register Number should be 12 digits"/> 
          </c:if>      
         </div>     
      </div>  
    </form>   

    <form method="post" action="name" id="name"> 

       <input type="text" id="studentName" name="studentName" size="30" maxLength="50" placeholder="Enter Student Name"></input> 

    </form>        
</div>    
      <div style="text-align: center;"> 
       <input id="inputFields" type="button" value="Search" /> 
      </div> 

    <!-- </form> --> 
<script>  
    $(document).ready(function(){ 
     $('#inputFields').click(function(event){ 
      if (document.getElementById('regNo').value !=""){   

       $("#number").submit(); 

      }else if(document.getElementById('studentName').value !=""){ 
       $("#name").submit(); 
      } 
     }); 
    });  
</script> 

</body> 

下面是在JSP JSTL代碼塊不起作用

<c:if test="${not empty invalidLength}"> 
    <c:out value="Register Number should be 12 digits"/> 
</c:if> 

另外,如果我使用c:out聲明沒有c:if標籤,那麼它的作品。但它錯位UI中的兩個輸入字段。您可以在jsp中看到div mycontainer代碼。我希望在regNo輸入字段下方顯示錯誤消息,但同時regNostudetnName輸入字段應該在一行中居中對齊。

PS:我得到Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core". Try increasing the version of the Dynamic Web Module project facet, as this method of reference may not be supported by the current JSP version (1.1).,但c:out標籤與c:if包裝作品。

+0

@SotiriosDelimanolis你能幫我解決這個問題,請。謝謝。 – user3705478 2014-10-08 21:24:28

+0

你使用maven嗎? – 2014-10-09 05:49:57

回答

1

,請嘗試以下方法:

  • 如果你正在使用maven,將它添加到你的依賴和Maven將增加罐子爲您提供:

    <dependencies> 
    
          <dependency> 
           <groupId>jstl</groupId> 
           <artifactId>jstl</artifactId> 
           <version>1.2</version> 
          </dependency> 
    
    </dependencies> 
    
    • ,如果你不使用maven將jstl庫添加到您的項目(jstl-1.2.jar)

    • 確保您設置了目標運行時爲您的項目下,Tomcat,Glassfish的,等等

,並請參閱本問題here

針對這些錯誤的部分,用<form:errors>從春天表單標籤: - 第一添加以下到您的網頁:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 

然後使用形式:錯誤類似如下:

<form:errors path="userName" cssClass="error" element="div" /> 

請參考以下教程,herehere

希望幫助

+0

你能回答這個問題嗎?請。 – user3705478 2014-10-09 07:02:29

+0

我正在回答這個問題!嘗試用我提供給你的解決方案來解決你的問題。 – 2014-10-09 07:03:40

+0

檢查我的更新回答 – 2014-10-09 07:08:47

0

我創建了一個名爲ProjectErrors新的類,我改變了代碼如下

if(regNo.equals(null) || regNo.isEmpty()){ 
     univErrors.setHasError(true); 
     model.addAttribute("isNull", univErrors );    
    }else if(Pattern.matches("[a-zA-Z]+", regNo)){ 
     univErrors.setHasError(true); 
     model.addAttribute("onlyNumbers", univErrors );  
    }else if(regNo.length() != 12){ 
     univErrors.setHasError(true); 
     model.addAttribute("length", univErrors );     
    } 

我改變了JSP這樣

<c:if test="${length.hasError}"> 
         <c:out value="Register Number should be 12 digits."/> 
        </c:if> 

        <c:if test="${onlyNumbers.hasError}"> 
         <c:out value="Register number can contain only digits."/> 
        </c:if> 

而且我的錯誤類看起來像這樣

public class ProjectErrors { 

    public Boolean hasError; 

    public ProjectErrors(boolean b) { 
     // TODO Auto-generated constructor stub 
     hasError = b; 
    } 

    public Boolean getHasError() { 
     return hasError; 
    } 

    public void setHasError(Boolean hasError) { 
     this.hasError = hasError; 
    } 


} 

現在我看到c:if tag正在工作。 但仍然在jsp中得到警告「找不到」http://java.sun.com/jsp/jstl/core「的標記庫描述符。嘗試增加動態Web模塊項目構面的版本,因爲此方法可能不支持當前JSP版本(1.1 )。「,

相關問題