سؤال

لدي كائن يسمى "العنصر". لديها خاصية تسمى "النوع"

عندما أفعل هذا:

<s:property value="item.type" />

أحصل على هذا: س

حسنًا ، حتى أتمكن من قراءة القيمة ، لكن عندما أحاول هذا:

<s:property value="item.type == 'Q'" /> 

أحصل على سلسلة فارغة

هذا يعطيني سلسلة فارغة:

<s:property value="%{#item.type == 'Q'}" />

حتى أنني حاولت هذا:

<s:property value="item.type.equals('Q')" />

لكنني حصلت على هذه السلسلة: خطأ

كيف يمكنني أن أحصل على "صحيح"؟

هل كانت مفيدة؟

المحلول

حسنًا ، لقد ناضلت مع هذا إلى الأبد ... واكتشفت في النهاية كيفية القيام بذلك. "Q" عبارة عن سلسلة حرفية مقابل "Q" وهي شخصية. وبالتالي...

<s:if test="%{#item.type == 'Q'}">

سوف يتم تقييمها دائمًا إلى False. بدلا من ذلك حاول ...

<s:if test="%{#item.type == \"Q\"}">

لقد رأيت ذلك أيضًا بهذه الطريقة ...

<s:if test='%{#item.type == ("Q")}'>

(لاحظ اقتباسات واحدة حول قيمة سمة الاختبار.)

ognl هو شوكة في جانبي. أظن أن البروتوكول الاختياري قد اكتشف هذا بالفعل. ولكن نأمل أن يساعد هذا شخص آخر.

نصائح أخرى

لا أعتقد أنه يمكنك وضع أي EL داخل خاصية القيمة لهذه العلامة. يمكنك تحقيق ذلك بشيء مثل:

<s:if test="%{#item.type == 'Q'}">
  true
</s:if>
<s:else>
  false
</s:else>

المزيد من الأمثلة على ذلك هنا

ملاحظة - أستخدم Freemarker للعرض ، لذلك قد لا يكون ما سبق دقيقًا. في جهاز freeMarker ، يمكنك القيام بذلك مع تعيين:

<#assign val = (item.type == 'Q')/>
${val}

أو يمكنك أيضًا استخدام If IF على النحو المذكور أعلاه:

<#if (item.type == 'Q')>true<#else>false</#if>
<s:set name="prop" value="%{'val'}"/>

<s:if test="%{#prop == 'val'}">
  <s:property value="%{#prop}" />
</s:if>

<s:elseif test="%{#prop=='val1'}">
  <s:property value="%{#prop}" />
</s:elseif>

<s:else>
  ...
</s:else>

الأمر بسيط مثل:

<s:property value='item.type == "Q"' />

فقط بحاجة إلى استبدال عروض أسعار واحدة مع علامات اقتباس مزدوجة والعكس بالعكس

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top