これを機能させることができました。
基本的に、SortMeta オブジェクトで UIColumn を提供して機能させる必要があります。レンダリング時の最初の並べ替えでは、Bean でコンポーネントを見つけて、それを sortMeta に割り当てる必要がありました。
以下はビューxhtmlの私のコードです
<p:dataTable id="transDataTable" var="trans"
value="#{myBean.transModel}" paginator="true" rows="50"
paginatorAlwaysVisible="false" lazy="true"
sortMode="multiple" sortBy="#{myBean.preSortOrder}"
resizableColumns="true">
<p:column headerText="User" sortBy="#{trans.user.name}" >
#{trans.user.name}
</p:column>
<p:column headerText="Company" sortBy="#{trans.companyName}">
#{trans.companyName}
</p:column>
<p:column headerText="Join Date" id="joinDateTime"
sortBy="#{trans.joinDateTime}" >
<h:outputText value="#{trans.joinDateTime}" />
</p:column>
</p:dataTable>
これは @PostConstruct で呼び出された私の Bean コードです
/*
* method to build initial sort order for multisort
*/
private void buildSortOrder() {
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
UIComponent column = viewRoot.findComponent("transDataTable:joinDateTime");
SortMeta sm1 = new SortMeta();
sm1.setSortBy((UIColumn)column);
sm1.setSortField("joinDateTime");
sm1.setSortOrder(SortOrder.DESCENDING);
preSortOrder.add(sm1);
}
これが正しい方法かどうかはわかりませんが、うまくいきます。Bean コードでビューからの ID を使用する必要がある場合、私は通常不快です。人々が注意を怠るとバグが発生する可能性があるからです。
簡単なヒントをくれた@CagatayCiviciに感謝します。