2014-04-03 56 views
2

所以我得到這個複選框:添加屬性去春來表單元素,如果條件真

<form:checkbox id="someCheckbox" path="someCheckbox"/> 

現在我想補充一個屬性 - 如果條件爲真專門checked="checked"。這可能沒有包裝在if語句中的整個元素?

基本上我想(在一個錯誤的結果):

<form:checkbox id="someCheckbox" path="someCheckbox" ${isChecked ? 'checked=checked' : ''}/> 

注意,添加屬性checked="",並使得它的價值條件將不能工作,因爲檢查=假或checked =''被視爲在現代瀏覽器中被選中。

+0

'$ {器isChecked? 'checked = checked':''}'如果您有<%@ taglib uri =「http://java.sun.com/jsp/jstl/core」prefix =「c」%>'頂部的jsp。 – Rembo

回答

0

由於form:checkbox通過路徑屬性與表單綁定,所以如果您在表單對象中設置了值就足夠了。

最後用JavaScript

+0

這是不夠的,因爲我希望它被檢查,如果值沒有設置(在一些其他情況下 - 因此條件)。我想處理這個問題,而不是將這些邏輯部分放在JavaScript中。 –

+0

那你爲什麼不把這個邏輯移到控制器上呢? –

1

做的更好,如果你把邏輯控制器

String checked=null; 
if(condition) 
checked="checked" 
else 
checked=""; 

modelMap.put("checkBoxChecked",checked); 

回報modelmap查看

,並考慮如下添加

<form:checkbox id="someCheckbox" path="someCheckbox" ${checkBoxChecked}/> 
1

這適用於Tomcat 7/JSP 2.2/JSTL 1.2中的我:

<form:checkbox id="someCheckbox" path="someCheckbox" 
    <c:if test="${isChecked}"> 
     checked="checked" 
    </c:if> 
/> 

使用三元操作就像在你的問題應該用JSP> = 2.0的工作:

<form:checkbox id="someCheckbox" path="someCheckbox" 
    ${isChecked ? "checked='checked'" : ""} 
/> 

或者你可以使用這個:

<c:choose> 
    <c:when test="${isChecked}"> 
     <c:set var="varChecked" value="checked='checked'"></c:set> 
    </c:when> 

    <c:otherwise> 
     <c:set var="varChecked" value=""></c:set> 
    </c:otherwise> 
</c:choose> 

<form:checkbox id="someCheckbox" path="someCheckbox" 
    ${varChecked} 
/> 

還有更簡潔,比包裝冗餘ac:if-tag中的整個表單標籤。

很明顯,您需要包含核心taglib才能工作。

+1

這不起作用。你會得到jsp編譯異常。 – Prasad

+0

這對我來說編譯很好。它的問題是什麼? – Bewusstsein

+0

它正在打破「weblogic.servlet.compilationexception ....找到沒有結束標記......」的行,儘管有結束標記和jstl-1.2jar,標準JAR在運行時可用。 – Prasad

2

包括核心JSTL標記在JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

然後

<input type="checkbox" name="someCheckbox" id="someCheckbox" <c:if test="${check your condition}">checked="checked"</c:if> /> 
相關問題