2017-02-22 29 views
1

如果${object}爲空,則其項目由*{item}訪問將導致:thymeleaf屬性或字段不能爲null找到

org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'item' cannot be found on null 

那麼如何解決這一點,我想有DIV結構依然存在,像以下示例中,currentUser爲空時,包含城市和名稱的div仍然存在。

<div class="form" th:object="${currentUser}"> 
    <div class="form-group form-group-sm"> 
      <label>city:</label> 
      <span id="details_city" th:text="*{address == null ? '' : address.city}">Hongkong</span> 
    </div> 
    <div class="form-group form-group-sm"> 
      <label>name:</label> 
      <span id="details_username" th:text="*{name}">Jane</span> 
    </div> 
</div> 

回答

0

我在項目中看到過這樣的情況(但不是春季項目)。該方法是所有用戶,即使是匿名(未經認證),都由用戶(例如或當前用戶)實例表示。這個實例對於匿名用戶來說大多是空的。這個想法是擺脫空檢查。 用戶類中有專門的方法,用於回答表示的用戶是否經過身份驗證。國際海事組織的做法在所使用的技術協議棧的範圍內體面地工作。

如果您的項目可行,您也可以嘗試這個想法。您可以爲匿名用戶創建一個空的currentUser實例。那麼currentUser將永遠不會爲空。但是如果你使用彈簧安全+百里香安全方言,你可以使用百里香來確定用戶是否是匿名的,如果這是必要的話。例如。樣本註銷鏈接可以查看登錄的用戶僅可呈現:

<li sec:authorize="isAuthenticated()"> 
     <a href="#" class="log-out-link"> 
     <i class="fa fa-sign-out"></i> Log out 
     </a> 
</li> 

一個@ControllerAdvice@ModelAttribute可以推動用戶參與所有相關意見。或者,您可以在視圖中提供一個單獨的空用戶,並使用類似th:object="${#objects.nullSafe(currentUser,emptyUser)}"

如果這太多,則不要使用th:object並添加一些額外的檢查。

+0

當我嘗試你的想法時,我會回來。 :) – Tiina

相關問題