0

私はprimefacesを初めて使用し、primefaceのオートコンプリートタグを使用したいので、この例に従いました。
これが私のコードです

layout.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
<head>

<title>Title</title>
</head>
<body>
<h:form id="form">  
    <p:panel header="AutoComplete" toggleable="true" id="panel">
        <h:panelGrid columns="2" cellpadding="5">  

            <h:outputLabel value="Simple :" for="acSimple" />  
            <p:autoComplete id="acSimple" value="#{autoCompleteBean.txt1}"   
                    completeMethod="#{autoCompleteBean.complete}"/>
                    </h:panelGrid>
                    </p:panel>
                    </h:form>
</body>
</html>

AutoCompleteBean.java

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean(name="autoCompleteBean")
@RequestScoped
public class AutoCompleteBean {  

    private String txt1;  

    public List<String> complete(String query) {  
        List<String> results = new ArrayList<String>();  

        for (int i = 0; i < 10; i++) {  
            results.add(query + i);  
        }  

        return results;  
    }  

    public String getTxt1() {  
        return txt1;  
    }  

    public void setTxt1(String txt1) {  
        this.txt1 = txt1;  
    }  
}

そのため、layout.xhtmlは正常にレンダリングされ、テキストフィールドが表示されますが、その後は機能せず、オートコンプリート機能が表示されません。
何か足りないものはありますか?または何が問題になるでしょう
ありがとう

4

3 に答える 3

1

投稿した xhtml は、 headbodyに標準の html タグを使用しているため、Bean で完全なメソッドを呼び出すために使用される Javascript を正しく解釈していない可能性があります。

h:headh:bodyを使用してみてください。

出力ウィンドウにヒントが表示される場合があります。次のようなものを確認してください。

sourceId=null[severity=(ERROR 2), summary=(One or more resources have the target of 'head', but no 'head' component has been defined within the view.), detail=(One or more resources have the target of 'head', but no 'head' component has been defined within the view.)]

Primefaces の h:head に関するスタック オーバーフローの議論を参照してください: What's the difference between <h:head> and <head> in Java Facelets?

于 2012-08-28T17:47:48.460 に答える
0

フェイスレットを作成するときは、常にh:headh:bodyを使用する必要があります。その理由は、オートコンプリートを機能させるには JavaScript が必要であり、h:head を含めないと jsf が JavaScript を正しく配置できないためです。

于 2012-08-28T17:50:48.003 に答える
0

同様の問題がありましたが、私の場合、p:autocompleteタグを囲んでいたpタグを削除すると問題は解決しました。

次のコードはエラー メッセージをスローしませんが、自動選択ドロップダウン メニューは表示されません。すべてを削除した後、正常に<p></p>動作します。

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
</h:head>
<h:body>
    <h:form>
        <p>
            <p:autoComplete id="place" value="#{addPlaceBean.place}"
                completeMethod="#{autoCompletePlace.completePlace}" var="place"
            itemLabel="#{place.city}, #{place.country}"
            itemValue="#{place}" converter="placeConverter">
            </p:autoComplete>
        </p>
    </h:form>
</h:body>
</html>
于 2017-10-06T10:29:48.573 に答える