function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
yuukiyuuki 

apex:paramの使い方

以下のようなVisualforceページを作成しています。

 

<apex:dataTable value="{!account.Contacts}" var="contact" cellPadding="4" border="1">
                  <apex:column>
                      <apex:commandLink> {!contact.Name}
                          <apex:param value="{!contact.Id}"/>  → 意味?
                      </apex:commandLink>
                   </apex:column>
</apex:dataTable>

 

paramタグをdeveloper's guideなどをみて同じように記載して

いるのですが、どういう意味(効果)があるのかわかりません。

 

また、commandLinkとして取引先責任者の名前が表示されるのですが

そのリンクをクリックしても、該当のページに飛んでくれません。

 

どのようにすれば該当のページに飛ばせるのでしょうか。

 

どなたかご教授頂けないでしょうか。

ご迷惑をお掛け致しますが、宜しくお願いいたします。

aki124aki124

実際に自分で修正・実行して検証したわけではないですが、次のように修正すれば動くのではないかな、と思います。

 

<apex:dataTable value="{!account.Contacts}" var="contact" cellPadding="4" border="1">
    <apex:column>
        <apex:outputLink value="/{!contact.Id}">{!contact.Name}</apex:outputLink>
    </apex:column>
</apex:dataTable>

 

まず、この場合には、commandLink ではなく、outputLink を使用します。
リンクを表示するためのコンポーネントには、commandLink と outputLink があります。
commandLink は、Apex のコントローラで実装したアクションを呼び出すためのリンクを生成する場合に使用し、outputLink は、任意の URL へ遷移するためのリンクを生成する場合に使用します。
今回提示していただいたソースと説明を見た限りでは、コントローラのアクションを呼ぶことなく、ただ単に contact.id の取引先責任者参照画面に遷移したいだけのようですので、このような場合には outputLink を使用します。

 

 

それと、apex:param を commandLink や outputLink で使用する意味(用途)についてですが、これは URL に付加するパラメータに動的なデータを挿入したい場合に利用します。

Developer's Guide の apex:param の説明(http://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_param.htm)には下記のような記述例が記載されています。

 

<apex:outputLink value="http://google.com/search">Search Google
    <apex:param name="q" value="{!contact.name}"/>
</apex:outputLink>

 

具体的に、contact.name の値が "David" であった場合、下記のようなリンクが出力されることになります。

 

<a href="http://google.com/search?q=David">Search Google</a>

 

# コード部分のURLが、何度直しても勝手にリンクになる・・・

yuukiyuuki

早速のご回答ありがとうございます。

 

apex:paramタグの意味(用途)は分かりました!!

本当にありがとうございます。

 

あと、貼り付けたソースなんですが、あれは例として貼り付けたもので、

実際は以下のようなソースです。

 

【Visualforceページ】

<apex:pageBlockTable title="自分の保守状況" value="{!customobject1}" var="u">
                <apex:column >
                    <apex:facet name="header">問合せ番号</apex:facet>
                    <apex:commandLink >{!u.name}
                      <apex:param name="id" value="{!u.id}"/>
                    </apex:commandLink>
                </apex:column>
</apex:pageBlockTable>

 

【コントローラー】

public List<CustomObject1__c> getCustomObject1(){
        
        return [select Id , Name from CustomObject1__c];
 }

 

ご教授頂いたようにcommandLinkの部分をoutputLinkで試してみたのですが、

文字化けしたページになってしまい上手くいきません・・・。

 

色々と質問をしてしまって申し訳ないんですが、ご教授頂けませんでしょうか。

 

宜しくお願い致します。

 

aki124aki124

問い合わせ番号を一覧表示するVisualforceページが文字化けしているということでしょうか?

 

おそらくスクリプトのエラー画面でしょうから、どこかでエラーが起きているものと思われます。

文字化けした画面で、ブラウザのエンコーディングをUTF-8に変えてあげると、エラーの内容が表示されるかもしれません。

 

試しに自分の環境で、それっぽく実装してみましたが、正常に動作しました。

正常に動作したソースをそのまま載せておきます。

(オブジェクト名含め、掲示板掲載用の修正は、行っていません。)

 

【コントローラ】

 

public class Sample20100508Controller {
    public List<CustomObject1__c> getCustomObject1() {
        return [select id, name from customobject1__c];
    }
}

 

 

【ページ】

 

<apex:page controller="Sample20100508Controller">
  <apex:pageBlock title="サンプル20100508">
    <apex:pageBlockTable title="自分の保守状況" value="{!customobject1}" var="u">
      <apex:column >
        <apex:facet name="header">問い合わせ番号</apex:facet>
        <apex:outputLink value="/{!u.id}">{!u.name}
        </apex:outputLink>
      </apex:column>
    </apex:pageBlockTable>
  </apex:pageBlock>
</apex:page>

 

 

yuukiyuuki

ブラウザの文字コードをUTF-8にしたら、エラーメッセージが出力されていました。

存在しないページに飛ぼうとしていたみたいでエラーになっていました。

 

ただ、よく分からないのは、/ (スラッシュ)が入っているかいないかで

エラーになったりする事です。

 

【自分で作成したページ】

<apex:outputLink value="{!u.id}">{!u.name}

 

【作成して頂いたページ】

<apex:outputLink value="/{!u.id}">{!u.name}

 

 

スラッシュを入れただけで、正常に動作しました。

何故だかお分かりになりますでしょうか?

 

aki124aki124

そういえば、その部分に関して説明をしていませんでした。申し訳ありません。

 

 

Force.comに格納されているレコードは、下記のようなURLで詳細画面を表示できます。

 

https://***.salesforce.com/xxxxxxxxxxxxxxx

 「xxxxxxxxxxxxxxx」はオブジェクトのId、「***」は組織が配置されているインスタンス名(na6,na7,ap0など)です。

 

私が提示したソースでは、このURLを、ホスト名を省略した絶対パスで指定しているため、リンク先が指定したIdの詳細画面になります。

 

 

yuukiさんの作成されたソースでは、スラッシュが無いため、相対パス指定となり、おそらく 「https://***.salesforce.com/apex/xxxxxxxxxxxxxxx」といった感じのURLに飛ぼうとしているのではないかと思います。

 

そこで、ページ名が「xxxxxxxxxxxxxxx」というVisualforceページが無いので、「ページが存在しません」というエラーが出たものと思われます。

 

 

# IdをURLに指定すると詳細画面に飛べるという仕様は、どこかのドキュメントで見たような気がしますが、どこで見たのか覚えていません・・・・

yuukiyuuki

ご回答ありがとうございます。

 

スラッシュを入れる入れないで、ここまで変わるとは

思いませんでした。

 

勉強になります。

 

今後とも宜しくお願い致します。