如何比較EL表達(dá)式語言中的兩個對象變量?我正在創(chuàng)建所有語言的下拉列表。列表的默認(rèn)語言選擇將由用戶添加的信息確定:<select>
<c:forEach items="${languages}" var="lang">
<c:choose>
<c:when test="${lang}.equals(${pageLang})">
<option value="${lang}" selected>${lang}</option>
</c:when>
<c:otherwise>
<option value="${lang}">${lang}</option>
</c:otherwise>
</c:choose>
</c:forEach></select>.equals在EL中似乎不存在。看了一下這里建議我編寫自己的函數(shù),然后導(dǎo)入并使用它。因為這只是針對此頁面的一個小小的事情,我不想為此開始創(chuàng)建庫等。我也不想開始為servlet創(chuàng)建專家對象,并在其中返回這些額外信息。我唯一能想到的就是從servlet返回整個選項行的實際html,而不僅僅是語言字符串,但這讓我覺得很難看,所以我希望有一個更優(yōu)雅的解決方案??焖傩迯?fù)EL中兩個字符串的最佳方案是什么?J2EE 1.4教程
3 回答

收到一只叮咚
TA貢獻(xiàn)1821條經(jīng)驗 獲得超5個贊
在表達(dá)式語言中,您只需使用==
或eq
運(yùn)算符來比較對象值。在幕后,他們將實際使用Object#equals()
。這樣做是這樣的,因為除了當(dāng)前的EL 2.1版本之外,你不能使用其他簽名來調(diào)用帶有標(biāo)準(zhǔn)getter(和setter)方法的方法(在即將發(fā)布的EL 2.2中,它是可能的)。
所以特定的路線
<c:when test="${lang}.equals(${pageLang})">
應(yīng)該寫成(注意整個表達(dá)式都在{
和里面}
)
<c:when test="${lang == pageLang}">
或者,等效地
<c:when test="${lang eq pageLang}">
兩者都在幕后粗略解釋為
jspContext.findAttribute("lang").equals(jspContext.findAttribute("pageLang"))
如果要比較常String
量值,則需要引用它
<c:when test="${lang == 'en'}">
或者,等效地
<c:when test="${lang eq 'en'}">
幕后花絮粗略地解釋為
jspContext.findAttribute("lang").equals("en")

蠱毒傳說
TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊
不確定我是否幫助你,但最簡單的方法是:
<c:if test="${languageBean.locale == 'en'"> <f:selectItems value="#{customerBean.selectableCommands_limited_en}" /></c:if>
只需從我的應(yīng)用程序快速復(fù)制和粘貼...

慕斯王
TA貢獻(xiàn)1864條經(jīng)驗 獲得超2個贊
“快速復(fù)制和粘貼”代碼片段而不實際理解他們所做的是非常有害的,并且不會讓自己受到重視。我建議不要這樣做。這同樣適用于將JSF與JSTL混合在一起,就像您在代碼片段中所表達(dá)的那樣,但這是另一個故事。
添加回答
舉報
0/150
提交
取消