displaytagソートとページネーションリンク(URL)が生成するのは長すぎます
-
29-09-2019 - |
質問
displaytagを使用する場合、URLはページングとソート用に生成されています。
外部のページングやソートに頼らずにこれを回避する方法はありますか?
乾杯。
解決
うまくいけば、これが誰かを助けるでしょう。そして、別の方法がある場合は、私に知らせてください。
私がこれを回る方法は、表示テーブルタグのすべてのパラメーターを除外することです。
<display:table excludedParams="*"> ... </display:table>
つまり、URLはパラメーターでいっぱいになりません。
素晴らしいですが、私たちが使用しているオブジェクトのリストをどのように処理しますか?
コンテキストの要求に属性を設定することでこれを行いました。そして、私はStripes Frameworkを使用しているので、ActionBeanContextを使用してこれを行いました。
public class SchemeActionBeanContext extends ActionBeanContext {
public void setThings(List<Things> things) {
getRequest().getSession().setAttribute("stuff", things);
}
public List<Things> getThings() {
return (List<Things>)getRequest().getSession().getAttribute("stuff");
}
そして、ページ/リクエストの場合、ライフサイクル全体に設定して取得できます。
他のヒント
私は、すべてのフォームフィールドがページネーションとソート中にURLに追加されているURLが同様の問題に直面していました。これは、以下に記載されているすべてのページネーションリンクを、形成するユニークなタイトル(ページに移動する)と、「次の」「前」などの内側のHTMLが形成されることによって解決されました。
以下のメソッドのJavaScriptパラメーションは、ここで説明されています。 2)フォーム名 - フォームの名前、3)マスター名 - コントローラーで呼び出される方法
「strnamesearch」という名前の入力ボックスにロジックがあり、それに基づいて呼び出し方が変更されます。
また、これを行うと、Display:Table TagにexpluedParams = "*"を追加することを忘れないでください
これがコードです:
function findAnchorGen(head1,head2,formName,masterName) {
var formObj = eval("document."+formName);
var methodName;
var strSearch = trim(formObj.strNamesearch.value);
if(strSearch == null || strSearch == '') {
methodNameP = "fetch"+masterName;
} else {
methodNameP = "search"+masterName;
}
var anchors = document.links; // your anchor collection
var i = anchors.length;
while (i--) {
var a = anchors[i];
var aRef = a.href;
var aTitle = a.title;
index = aTitle.indexOf("Go to page");
var inHtml = a.innerHTML;
if(index >= 0 || inHtml == 'Last' || inHtml == 'Next' || inHtml == 'First' || inHtml == 'Prev' || inHtml == head1 || inHtml == head2) {
//alert("Ref = " + aRef + " | title = " + aTitle + " | inner html = " + a.innerHTML);
a.href="#";
a.onclick = (function(aRef,formName,methodNameP){return function(){fSubmit(aRef,formName,methodNameP);}})(aRef,formName,methodNameP);
}
}
}
function fSubmitGen(aRef,formName,methodNameP) {
var formObj = eval("document."+formName);
formObj.action = aRef;
formObj.method.value = methodNameP;
formObj.submit();
}
これは回避策であり、私たちにとってうまく機能しています。それがあなたのために働くことを願っています。