2016-03-22 10 views
2

Wildfly 8、JSF 2.2EL-条件演算子?:複合コンポーネントの予期しない動作に

複合成分の条件演算子? :c:foreachループ内のリストで使用される場合、その動作が正しくありません。複合コンポーネントがui:includeまたはtaglibとして書き換えた場合の例ファイルの

出力が期待

eng eng germ germ ital ital 

として

eng germ ital 

とではありませんその後、期待される結果が来ます。

ファイル(test.xhtml):

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:fn="http://java.sun.com/jsp/jstl/functions" xmlns:my="http://java.sun.com/jsf/composite/myComp" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 

<h:body> 
    <my:testConditionalOperator languagesList="#{['eng', 'germ', 'ital']}"></my:testConditionalOperator> 
</h:body> 
</html> 

コンポジットコンポーネント(testConditionalOperator.xhtml):

<!DOCTYPE html> 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:a="http://xmlns.jcp.org/jsf/passthrough" 
    xmlns:of="http://omnifaces.org/functions" xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:o="http://omnifaces.org/ui" xmlns:h="http://xmlns.jcp.org/jsf/html" 
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions" 
    xmlns:cc="http://java.sun.com/jsf/composite"> 
    <cc:interface> 
     <cc:attribute name="languagesList"></cc:attribute> 
    </cc:interface> 
    <cc:implementation> 
     <c:forEach var="language" items="#{cc.attrs.languagesList}" > 
      #{fn:length(cc.attrs.languagesList) gt 1 ? language : "a"} 
      <c:if test="#{fn:length(cc.attrs.languagesList) gt 1}"> 
       #{language} 
      </c:if> 
     </c:forEach> 
    </cc:implementation> 
</html> 

答えて

2

これはMyFacesのをマニフェストしないクロサギ科のバグのように見えます。

回避するには、endのサイズを設定し、varStatusを使用してください。

<cc:implementation> 
    <c:forEach var="language" items="#{cc.attrs.languagesList}" end="#{cc.attrs.languagesList.size()}" varStatus="loop"> 
     #{loop.end gt 1 ? language : "a"} 
     <c:if test="#{loop.end gt 1}"> 
      #{language} 
     </c:if> 
    </c:forEach> 
</cc:implementation> 

注意だけではなく、fn:length()

+0

ありがとうのsize()を使用するEL 2.2能力!それは奇妙なバグです。モハラに報告すべきでしょうか? – Tony

+0

今、コンポジットコンポーネントで条件付きを使うのは面白いです。 – Tony

+0

はい、してください。それはJSTLライフサイクルに関連しています。それは ''とうまく動作します。 – BalusC