こんにちは、管理人の@Salesforce.Zです。
APEXクラスとVF画面をペアで開発するのが案件次第ですが、多い場合もある
しかし、普段はね
APEXクラス側で、下記のように(抜粋)
public class MyController{ public String userName {get;set;}
ようにすれば、
VF画面で下記のようにして、APEXとVFは通信できるはず
<apex: page controller=”MyController”>
<apex:form>
<apex:inputText value="{!userName}"/>
</apex:form
</apex;page
たまにはできない場合がある、それはHTML tagを使う場合
salesforceの普通に通信できない、これも当たり前が、
ApexタグをVF側に使っているのに 通信できない場合もある
今回、それの対策や確認すべき点を共有します。
★ HTMLタグを使っていないのにクラスメンバ変数はAPEXで画面に入力した値を取れない
目次
通信できない時
HTML タグ?
HTMLタグを使っているなら、
apex:actionFunctionでパラメータを使用し、わざわざ、js経由で タグの値を取得し、actionFuntionのパラメータでクラスのメソッドに渡して、処理するなどで対応可能
APEXタグを使っているのに
これ一番厄介ですね。
普段は自動的に通信するはずじゃん
こんな時に、apex:commondlinkやapexcommondbuttonを使っているか?
使っている場合、immediate属性をtrueにしているか?
trueにしている場合、ビンゴ、これだ!
<apex:page controller="ContactsListController"> <apex:form> <apex:pageBlock title="Contacts List" id="contacts_list"> <!-- Contacts List --> <apex:pageBlockTable value="{! contacts }" var="ct"> <apex:column > <apex:commondLink value="edit" action="{!editLink}" immediate="true"/> </apex:column > <apex:column value="{! ct.FirstName }"/> <apex:column value="{! ct.LastName }"/> <apex:column value="{! ct.Title }"/> <apex:column value="{! ct.Email }"/> </apex:pageBlockTable> </apex:pageBlock> </apex:form> </apex:page>
ページの項目に関連付けられている入力規則を処理することなく、このコンポーネントに関連付けられているアクションをすぐに実行するかどうかを指定する boolean 値。true に設定すると、アクションがすぐに実行され、入力規則はスキップされます。指定されていない場合、この値はデフォルトの false に設定されます。
どういうことというと、必須項目のチェックをそのリンクやボタンなどで行って欲しくない時に、trueにする
することによって、apexとvfの通信がしなくなる、一方で、画面に入力した値もapex側で取得できない
APEXのことをサーバーと思っていいかなと思います。
VFはフロント側
APEXとVFの通信は サーバーとの通信のことです。
もしimmediateが原因で、通信しない場合、immediateをtrueにする必要がもう一度検討し、やっぱりする必要がある場合
actionFuncionでやるしかないかなと思います。
場合によって、actionsupportなども考えられる
モヤもしするより、これで、スッキリになったでしょうか