在IF语句中结合多个AND / OR的Apache Velocity

use*_*434 1 velocity

我对在if语句中处理多个和/或语句感到困惑。我希望有人可以帮助我解决这个问题。Velocity参考指南似乎没有解决我想要做的事情。

我正在使用将要使用公共字段的应用程序。我必须使用名称映射公共字段中的ID。我的if语句有两个部分。我首先有一个OR操作数来处理一个字段的两个值。然后,我还有另一个必须结合AND语句的组件。

这是我目前拥有的:

      #if ($!myid == '21' && $!mytechno == 161)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;John Smith
      #elseif ($!myid == '21' && $!mytechno == 162)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;Mickey Mouse
      #elseif ($!myid == '21' && $!mytechno == 164)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;Jean Jones)
      #else<B>Technologist:</B>&nbsp;$!MytechData

      #end
      #end
Run Code Online (Sandbox Code Playgroud)

因此,到目前为止,此操作正常。基本上,我正在检查myID的值,并确保必须存在mytechno。这样,它将填充我正在引用的Tech2字段。

尽管这一切都很好,但我需要添加另一个myid值。假设myID的值为10。

    #if ($!myid == '21' || $myid='10' && $!mytechno == 161)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;John Smith
      #elseif ($!myid == '21' || $myid='10' && $!mytechno == 162)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;Mickey Mouse
      #elseif ($!myid == '21 || $myid='10'' && $!mytechno == 164)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;Jean Jones)
      #else<B>Technologist:</B>&nbsp;$!MytechData

      #end
      #end
Run Code Online (Sandbox Code Playgroud)

在这种情况下发生的事情是,它会检查第一条语句并假定它是正确的,因为myID与我正在使用的数据匹配。因此,如果mytechno为164,则显示“ John Smith”。逻辑无法检查mytechno字段。

我也试过了

      #if ($!myid == '21' || $myid='10') && ($!mytechno == 161)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;John Smith
      #elseif ($!myid == '21' || $myid='10') && ($!mytechno == 162)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;Mickey Mouse
      #elseif ($!myid == '21 || $myid='10'') && ($!mytechno == 164)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;Jean Jones)
      #else<B>Technologist:</B>&nbsp;$!MytechData

      #end
      #end
Run Code Online (Sandbox Code Playgroud)

那也不起作用。谁能提供任何建议?综上所述,它应该是一个OR语句,再加上一个AND语句。如果这是SQL,我可以轻松地做到这一点,只是不确定Velocity

use*_*434 6

我想我发现了这一点。所以这就是我所做的

      #if (($!myid == '21' || $myid='10') && ($!mytechno == 161)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;John Smith
      #elseif (($!myid == '21' || $myid='10') && ($!mytechno == 162)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;Mickey Mouse
      #elseif (($!myid == '21 || $myid='10'') && ($!mytechno == 164)
      <B>Technologist:</B>&nbsp;$!MytechData<BR><BR>
      <B>Tech2</B>&nbsp;Jean Jones
      #else<B>Technologist:</B>&nbsp;$!MytechData

      #end
      #end
Run Code Online (Sandbox Code Playgroud)

我仍然需要进一步测试。但似乎我必须加上一组额外的括号。

编辑:我必须在末尾删除多余的括号。否则,多余的括号将显示在应用程序本身上。不知道为什么我必须删除它,因为我以为在封装数据时必须加上一组括号。至少这就是SQL的工作方式。