【VisualForce】演算子 '=' のパラメータ種別が間違っています。期待テキスト、受信数字


演算子 '=' のパラメータ種別が間違っています。期待テキスト、受信数字

VisualForceでちょっと詰まったので備忘録。

親page

<apex:variable var="pageNumber" value="1" />
<!-- repeatというループすることができるVisualForceのタグ -->
<apex:repeat value="{!viewModel.displayListEachPage}" var="displayList">
  <!-- コンポーネント呼び出し -->
  <c:COMPONENT pageNumber='{!pageNumber}' />
  <!-- pageNumberをインクリメント -->
  <apex:variable var="pageNumber" value="{!VALUE(pageNumber)+1}" />
</apex:repeat>

親ページからコンポーネントにpageNumberを渡す

component
<apex:component>
  <!-- 親ページからページ数をもらうとする。型はInteger、必須項目 -->
  <apex:attribute name="pageNumber" type="Integer" description="ページ数" required="true" />

  <!-- outputPanelのrenderedでIF関数を使用 -->
  <apex:outputPanel rendered="{!IF(pageNumber == 1, true, false )}">
   こんにちは
  </apex:outputPanel>
</apex:component>

attributeというタグで親ページからpegeNumberを受け取る。
outputPanelのrenderedという属性を使用してタグで囲ったコンテンツを描画するかどうか判別できる。

エラー

画面を表示するとエラーが表示された。

演算子 '=' のパラメータ種別が間違っています。期待テキスト、受信数字
component c:COMPONENT のコンポーネント <apex:outputPanel> の式「{!IF(pageNumber == 1, true, false)}」にエラーがあります。

期待するのはテキストですよ。指定されているのは数字になってますよ。

と言ってそう。

デプロイエラー

VisualForce
  <apex:outputPanel rendered="{!IF(pageNumber == '1', true, false )}">
  </apex:outputPanel>

1をStringにした。

演算子 '<>' のパラメータ種別が間違っています。期待数字、受信テキスト

デプロイが通らない。

このやり方だといけたみたいな記事も見た

VisualForce
  <apex:outputPanel rendered="{!(pageNumber == '1'}">
  </apex:outputPanel>

できない。

解決策

VisualForce
<apex:component>
  <!-- 型をString -->
  <apex:attribute name="pageNumber" type="String" description="ページ数" required="true" />

  <!-- 数字をStringにした -->
  <apex:outputPanel rendered="{!IF(pageNumber == '1', true, false )}">
    こんにちは
  </apex:outputPanel>
</apex:component>
  • apex:attributeのtype属性をIntegerからStringに変更
  • apex:outputPanelのIF関数で等価する値をStringにする


表示された

IF関数を省略するしても大丈夫。

VisualForce
  <apex:outputPanel rendered="{!(pageNumber == '1'}">
  </apex:outputPanel>