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
nobuoiwamotonobuoiwamoto 

ページの途中をリンク指定して表示する方法

 

お世話になっております。

 

HTMLでAタグ内で、xxx.html#aaaと指定するように、Visualforceページの途中を指定して表示する

ことはできないでしょうか。

 

実際には、画面上部に検索条件がありまして、画面下部に検索結果を出すようにしております。

検索条件を入力した後、検索ボタンを押しても、検索条件が長すぎてページを占拠してしまい、

検索結果が表示されているかどうかが見えない状態になってしまいます。

 

できれば、コントローラメソッドでreturnするPageReferenceとして、指定できる方法があれば良いなと

思っているのですが、如何でしょうか。

 

よろしくお願い致します。

 

 

Best Answer chosen by Admin (Salesforce Developers) 
nobuoiwamotonobuoiwamoto

自己レスです。

 

あまりきれいな方法ではないのですが、Javascriptでメソッドを呼び出した後に

location.hrefで移動することで解決しました。

<apex:page controller="TempController">
<script>

function moveAbc() {
	actionTestExec();
	location.href = "#abc";
	return false;
}

</script>
    同じページにリンクする
    <apex:form >
        <apex:commandButton onclick="return moveAbc();" value="TestMethodCall" reRender="hoge"/>
        <apex:actionFunction name="actionTestExec" action="{!TestExec}" reRender="hoge"/>
    </apex:form>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    
    <apex:outputPanel id="hoge">
    <a name="abc">
    <apex:outputText value="{!hoge}" />
    </a>
    </apex:outputPanel>
    
</apex:page>

 

public class TempController {
	
	public String hoge{get;set;}
    
    public PageReference TestExec() {
        
        hoge = 'hogehoge';
		return null;        
    }

}

 

ただ、あまりきれいな方法ではないので、検索条件を隠す方法も含め、検討したいと思います。

Hikeyさんありがとうございました。

 

All Answers

HikeyHikey

PageReference はURLを指定することができるようです。

 

以下のようにするば可能だと思います。プロファイルの「開発モード」をOFFにしてサンプルコードを実行してみてください。

「hoge」 に表示がされると思います。

 

コントローラ:TempController

 

public class TempController {
    
    public PageReference TestExec() {
        
        PageReference rtnPage = new PageReference('/apex/temp#abc');
               
        return rtnPage ;
    }

}

 

ページ:temp

 

<apex:page controller="TempController">
    同じページにリンクする
    <apex:form >
        <apex:commandButton action="{!TestExec}" value="TestMethodCall" reRender="SizeSection"/>
    </apex:form>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    
    <a name="abc">
    hoge
    </a>
    
</apex:page>

 

検索条件が多いということで画面を自動的にスライドさせたいということのようですが、pageBlock コンポーネントで検索条件を

隠すとか、panelBarや、tabコンポーネントなど検索条件を隠すようなインターフェイス設計も検討されてはいかがでしょうか。

:smileyhappy:

 

 

 

 

nobuoiwamotonobuoiwamoto

 Hikey 様

 

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

また、返信遅くなりまして、申し訳ありません。

 

なるほど、PageReferenceをnewしてURL先を指定してあげればよいのですね。

ずっとPages.XXXXというような方法でPageReferenceを使用していたので、気づかなかった

です。ありがとうございます。

 

ただ、まだ少し苦戦しておりまして、検索結果の受け渡しができておりません。

試しに、setRedirectを使用して、

 

<apex:page controller="TempController">
    同じページにリンクする
    <apex:form >
        <apex:commandButton action="{!TestExec}" value="TestMethodCall" reRender="hoge"/>
    </apex:form>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    
    <apex:outputPanel id="hoge">
    <a name="abc">
    <apex:outputText value="{!hoge}" />
    </a>
    </apex:outputPanel>
    
</apex:page>

 

 

public class TempController {
	
	public String hoge{get;set;}
    
    public PageReference TestExec() {
        
        hoge = 'hogehoge';
        
        PageReference rtnPage = new PageReference('/apex/temp#abc');
        rtnPage.setRedirect(true);               
        return rtnPage ;
    }

}

 

というようなコードを書いたのですが、hogehogeという文字列を表示してくれません。

 

もし、何かお気づきの点があれば、教えていただけますか。

 

#検索条件を隠す件についても、検討してみたいと思います。ありがとうございます。

 

nobuoiwamotonobuoiwamoto

自己レスです。

 

あまりきれいな方法ではないのですが、Javascriptでメソッドを呼び出した後に

location.hrefで移動することで解決しました。

<apex:page controller="TempController">
<script>

function moveAbc() {
	actionTestExec();
	location.href = "#abc";
	return false;
}

</script>
    同じページにリンクする
    <apex:form >
        <apex:commandButton onclick="return moveAbc();" value="TestMethodCall" reRender="hoge"/>
        <apex:actionFunction name="actionTestExec" action="{!TestExec}" reRender="hoge"/>
    </apex:form>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    
    <apex:outputPanel id="hoge">
    <a name="abc">
    <apex:outputText value="{!hoge}" />
    </a>
    </apex:outputPanel>
    
</apex:page>

 

public class TempController {
	
	public String hoge{get;set;}
    
    public PageReference TestExec() {
        
        hoge = 'hogehoge';
		return null;        
    }

}

 

ただ、あまりきれいな方法ではないので、検索条件を隠す方法も含め、検討したいと思います。

Hikeyさんありがとうございました。

 

This was selected as the best answer