2011-06-02 75 views
16

在我目前的頁面上,我使用JSTL來檢查數據是否可用於我的表單。我面臨的問題是「如果沒有數據,我沒有看到文本字段」。我可以使用和標籤來解決這個問題,但是如果其他代碼都是通過頁面的話,那麼這會帶來很多問題。任何人都可以建議我一個更好的清潔解決方案,以解決這個問題?
JSTL條件檢查

<c:if test="${salesData!=null}"> 
    <c:if test="${fn:length(salesBundle.salesArea) > 0}"> 
    <input type="text" id="sales_area" class="salesManagerStyle"> 
    </c:if> 
</c:if> 

回答

17

您可以在test中有多個條件。

<c:if test="${salesData != null && fn:length(salesBundle.salesArea) > 0}"> 
    <input type="text" id="sales_area" class="salesManagerStyle"> 
</c:if> 

但你也可以使用關鍵字empty一個nullcheck和lengthcheck。

<c:if test="${not empty salesData.salesArea}"> 
    <input type="text" id="sales_area" class="salesManagerStyle"> 
</c:if> 

這就是你現在可以得到的最好的東西。如果您需要重複使用頁面中其他地方的相同條件,那麼您也可以通過<c:set>將其保存。

<c:set var="hasSalesData" value="${not empty salesData.salesArea}" /> 
... 
<c:if test="${hasSalesData}"> 
    <input type="text" id="sales_area" class="salesManagerStyle"> 
</c:if> 
... 
<c:if test="${hasSalesData}"> 
    Foo 
</c:if> 
+0

BalusC , 謝謝回覆。 t0mcat 2011-06-02 20:11:34

+0

其實剛剛意識到,這仍然是一樣的c:if。要實現c:選擇,我們仍然需要通過相同數量的語句。對? – t0mcat 2011-06-02 21:01:35

+0

是的,基本上。這是收益。如果您使用的是像JSF這樣的MVC框架,那麼您可以通過在組件上使用'rendered'屬性來保存''。例如。 ''。 – BalusC 2011-06-02 21:02:58

0

我試圖把儘可能少的邏輯儘量在我的網頁,

「的界面層是相對免費的應用程序處理的;窗口或網頁轉發任務請求中間層」格雷格拉曼,應用UML和模式第三版第575頁 - 信息系統:經典的三層架構。

還做客戶端級的控制/驗證持久化數據之前...但我想,如果它是傳統和網頁,你可以觸摸的唯一的東西......這使得SENS