0

JSF 2.0 でLiferay 6.1 GA2を使用しています ( liferay は 3.1.2-ga3mojarra 2.1.21、およびprimefaces 3.5 )。オートコンプリート フィールド (複数) を実装しようとしていますが、機能していません。バッキング Bean の完全なメソッドが呼び出されていません。

ただし、ドロップダウンで単一の単純なオートコンプリート フィールドを使用すると、Bean の完全なメソッドがボタン クリックで呼び出され、空のクエリがメソッドに渡されます。

私のコードは以下の通りです:

content.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<f:view xmlns="http://www.w3.org/1999/xhtml"
    xmlns:aui="http://liferay.com/faces/aui"
    xmlns:aui-cc="http://liferay.com/faces/aui-cc"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:portlet="http://java.sun.com/portlet_2_0"
    xmlns:bridge="http://portletfaces.org/bridge"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jsp/jstl/core"

    version="2.1">

    <ui:composition template="template.xhtml">
        <ui:define name="content-placeholder">
            <div class="tab_main_content">
                <aui:layout>
                        <p:autoComplete id="to" name="to" value="#{myBean.to}" completeMethod="#{myBean.getUsers}" multiple="true"/> 
                </aui:layout>
            </div>
        </ui:define>
    </ui:composition>
</f:view>

template.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<f:view xmlns="http://www.w3.org/1999/xhtml"
    xmlns:aui="http://liferay.com/faces/aui"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:portlet="http://java.sun.com/portlet_2_0"
    xmlns:liferay-ui="http://liferay.com/faces/ui"
    xmlns:c="http://java.sun.com/jsp/jstl/core"

    version="2.1">

    <div id="msgPortletDiv" class="gray_box3">
        <h:form method="post" enctype="multipart/form-data">
            <!-- INSERT: For content -->
            <ui:insert name="content-placeholder">
                    placeholder text
            </ui:insert>
        </h:form>
    </div>  
</f:view>

バッキング Bean (getUsers) および 'to' 属性からの完全なメソッド

private List<String> to = new ArrayList<String>();

// Autocomplete method
public List<String> getUsers(String query) {  
    _log.info("getUsers() method in myBean for query: " + query);
    List<String> results = new ArrayList<String>(); 

    return results;  
}  

//Getter and setter for 'to'
public List<String> getTo() {
    return to;
}

public void setTo(List<String> to) {
    this.to = to;
}

互換性の問題があるのか​​ 、それとも私が何か間違ったことをしているだけなのかはわかりません. ライフレイを使用したプライムフェイスのオートコンプリートのデモをオンラインで見つけることができないようです。

どんな助けでも大歓迎です!

**編集: トラブルシューティングのために、content.xhtml を単純化し、template.xhtml を使用しないようにしましたが、それでもバッキング Bean メソッドをトリガーしません。前述のように、単純なドロップダウン バージョンの onclick はこれで機能しますが、非ドロップダウン オートコンプリート フィールドの ajax 呼び出しは機能しません。

簡略化された content.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<f:view xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"

    version="2.1">
    <h:form>
        <div class="tab_main_content message-body">
            <p:autoComplete id="to" name="to" value="#{myBean.to}" completeMethod="#{myBean.getUsers}" multiple="true"/>
        </div>
    </h:form>
</f:view>
4

1 に答える 1

0

すべてがほぼ正しいと思います。ただし、バッキング Bean で 1 つのことを変更する必要があります。あなたは、ドロップダウンがうまく機能すると言います。したがって、1 人のユーザーを選択しても問題ありません。バッキング Bean#{myBean.to}がこのように定義されている場合、private User toこれは User の 1 つのインスタンスを保持できるため、1 つの選択に適しています。

これをに変更するprivate List<User> to と、リストにユーザーの複数のインスタンスを保持できます。ゲッターとセッターを追加することを忘れないでください。

于 2013-09-16T08:32:13.283 に答える