Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 如何比较EL表达式语言中的两个对象变量?_Jsp_Operators_Jstl_El_Object Comparison - Fatal编程技术网

Jsp 如何比较EL表达式语言中的两个对象变量?

Jsp 如何比较EL表达式语言中的两个对象变量?,jsp,operators,jstl,el,object-comparison,Jsp,Operators,Jstl,El,Object Comparison,我正在创建所有语言的下拉列表。列表的默认语言选择将由用户添加的信息决定: <select> <c:forEach items="${languages}" var="lang"> <c:choose> <c:when test="${lang}.equals(${pageLang})"> <option value="${lang}" selected>${

我正在创建所有语言的下拉列表。列表的默认语言选择将由用户添加的信息决定:

<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>

${lang}
${lang}
.equals
在EL中似乎不存在。看了这里之后,建议我编写自己的函数,然后导入并使用它。因为这是一个一次性的小东西,只是为了这个页面,我不想开始创建库等只是为了这个。我也不想开始创建专家对象,让servlet返回这些额外的信息

我唯一能想到的是从servlet返回整个选项行的实际html,而不仅仅是语言字符串,但这让我觉得很难看,所以我希望有一个更优雅的解决方案

在EL中比较两个字符串的最佳快速修复方案是什么


我不确定是否正确,但最简单的方法是:

<c:if test="${languageBean.locale == 'en'">
  <f:selectItems value="#{customerBean.selectableCommands_limited_en}" />
</c:if>

只是一个快速复制和粘贴从我的应用程序

HTH

在中,您可以使用
==
eq
操作符来比较对象值。在幕后,他们实际上会使用
对象#equals()
。这样做是因为在使用当前的EL2.1版本之前,您不能使用标准getter(和setter)方法以外的其他签名调用方法(在即将到来的EL2.2中是可能的)

那么具体的路线呢

<c:when test="${lang}.equals(${pageLang})">
或者,相当于

<c:when test="${lang eq pageLang}">
<c:when test="${lang eq 'en'}">
如果要比较常量
字符串
值,则需要引用它

<c:when test="${lang == 'en'}">

嘿,我想你是在比较一个字符串和一个“常量”字符串?languageBean.locale==“en”?而我正在比较两个变量,因此“==”将不起作用,因为它将比较指针。谢谢,但实际上,部分正确,因为BalusC解释说“==”毕竟是正确的运算符,我可以使用它!“快速复制和粘贴”代码片段而不真正理解它们的作用是非常有害的,并且不会给自己带来很大的影响。我建议不要这样做。这同样适用于以代码段中所示的方式混合JSF和JSTL,但这是另一回事。@BalusC:将JSF和JSTL一起使用有问题吗?JSF不是比JSTL更高级的框架吗?我假设我也可以使用
test=“${lang eq'en'}”呢?我在上面看到了
eq`但它不是字符串常量?只是为了确保我不会经常使用JSTL/expression语言often@Sucker:
eq
=
的别名。他们做的完全一样。另请参见。它除了在1个字母字符串的比较情况下有效。那么你应该使用@exodus@exodus:请不要把OGNL和EL混淆。你能举个例子说明如何在test子句中使用
&&
|
添加多个测试条件(即多个测试条件)吗?
<c:when test="${lang == 'en'}">
<c:when test="${lang eq 'en'}">
jspContext.findAttribute("lang").equals("en")