0

デモでは、このコードを見ています。この JSF では、autoCompleteView.completeQuery はパラメーターなしで呼び出されますが、このメソッドは Bean で String パラメーターを使用して定義されています。これはJSFで許可されていますか?

<p:autoComplete id="queryPojo" value="#{autoCompleteView.query}"
 completeMethod="#{autoCompleteView.completeQuery}" var="query"
 itemLabel="#{query.displayName}" itemValue="#{query}"
 converter="queryConverter" />

public List<Query> completeQuery(String query) {

        List<Query> allQueries = service.getQueries();
        List<Query> filteredQueries = new ArrayList<Query>();

        for (int i = 0; i < allQueries.size(); i++) {
            Query skin = allQueries.get(i);
            if(skin.getName().toLowerCase().contains(query)) {
                filteredQueries.add(skin);
            }
        }         
        return filteredQueries;
    }

編集: 検索 Bean:

@Named
@RequestScoped
public class SearchController {

    private String word;

    // For AutoComplete suggestions
    private Query selectedQuery;

    @Inject
    private QueryService service;

    @Inject
    private Word wordObject;

    public void search() {
        if (word != null && !word.isEmpty()) {
            wordObject.searchWord(word);;
             ...
        }else {
            System.out.println("Query can't be null!");
        } 
    }

    public List<Query> completeQuery(String query) {

        List<Query> allQueries = service.getQueries();
        List<Query> filteredQueries = new ArrayList<Query>();

        for (int i = 0; i < allQueries.size(); i++) {
            Query skin = allQueries.get(i);
            if(skin.getName().toLowerCase().contains(query)) {
                filteredQueries.add(skin);
            }
        }

        return filteredQueries;
    }

    public String getWord() {
        return word;
    }

    public void setWord(String word) {
        this.word = word;
    }

   public Query getSelectedQuery() {

        return selectedQuery;
    }

    public void setSelectedQuery(Query selectedQuery) {
        this.selectedQuery = selectedQuery;
    }
}

JSF ビュー:

<h:form>
        <p:growl id="msgs" showDetail="true" />
        <h:panelGrid columns="2" cellpadding="5">

            <p:autoComplete id="wordForm" value="#{searchController.query}"
                completeMethod="#{searchController.completeQuery}" var="query"
                itemLabel="#{query.displayName}" itemValue="#{query}"
                converter="queryConverter" forceSelection="true" />

            <p:commandButton value="search" oncomplete="PF('dlg').show()" **action="#{searchController.search}"** />

        </h:panelGrid>
    </h:form>

私は p:AutoComplete フォームを持っているので、この通常の inputtext フォームはまだ必要ですか?

                <h:inputText id="word" "
                    value="#{searchController.word}" />
                <h:message for="word" />
                <h:commandButton id="search" value="search"
                    action="#{searchController.search}" />
            </h:panelGrid>
        </h:form>
4

1 に答える 1

1

はい、これは許可されます。これは、「completeMethod」が「value」タグの値を「completeMethod」内のパラメーターとして自動的に設定するためです。このアプローチでは、値内に独自のドメイン オブジェクトを指定して、バッキング Bean の「completeMethod」メソッド内で操作することもできます。

編集:

<p:autoComplete id="wordForm" value="#{searchController.word}"
completeMethod="#{searchController.completeQuery}" var="query"
itemLabel="#{query.displayName}" itemValue="#{query}"
converter="queryConverter" forceSelection="true" />
于 2016-03-09T07:37:14.353 に答える