3

これが何度も尋ねられたことは知っていますが、私の質問は少し異なります。

データベースにクエリを実行して結果をスローする JSF ページがあります。JSF に移行する前に、JSP でこれを行っていましたが、正常に動作していました。

私がJSPを使用していたとき、以下は私が使用していたリンク形式です

http://localhost:8080/blmdatabase/index.jsp?SearchString=Name&Category=Contact&Submit=Submit

私のindex.jspは、param.SearchStringとparam.Categoryを使用して値を取得し、「送信」は検索の「送信」ボタンをアクティブにするために使用されていました。

xHTML/JSF で同じことを行うにはどうすればよいですか?

これが私が試したものです...

http://localhost:8080/blmdatabase/index.xhtml?search=#{some search string}

私のindex.xhtmlで

    <td>
    <f:metadata>
        <f:viewParam name="search" value="#{databaseSearch.searchstring}" />
    </f:metadata>
  <p:inputText id="searchstring" size="20" maxlength="20"  value="#{databaseSearch.searchstring}"/> <p:commandButton id="submit" icon="ui-icon-search" title="Search Database" update="panel" actionListener="#{databaseSearch.customerList}" />
    </td>

私のデータベースでSearch.java

@ManagedBean(name = "databaseSearch")
@SessionScoped

public class databaseSearch implements Serializable {

    public String searchstring;
  //getter and setter for searchstring
}

また、フォームを「送信」する必要があります....私はこれに慣れていないので、これが以前に議論されていたらすみません...

また、 index.html を指定すると、jsf コンポーネントが読み込まれず、空白のページが表示されます。私が行くかのように

http://localhost:8080/blmdatabase/

私のprimefacesコンポーネントは正常にロードされますが、そうすると

 http://localhost:8080/blmdatabase/index.xhtml

そうではないので、今はパラメータを渡す方法を考えています:(

Web.xml

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
4

3 に答える 3

4

タグ<f:event type="preRenderView">内にフォームを追加して「送信」できます。<f:metadata>

<f:metadata>
    <f:viewParam name="search" value="#{databaseSearch.searchstring}" />
    <f:event type="preRenderView" listener="#{databaseSearch.doSearch}" />
</f:metadata>

このようにして、Bean がこの特定のクエリ文字列を検索する方法を実装できます。

public void doSearch(ComponentSystemEvent event) {
    if(!searchString.isEmpty()) {
        // Do your search here 
    }
}
于 2013-07-31T19:40:14.130 に答える
2

Faces サーブレットは、faces仮想フォルダーに保持されているものすべてにマップされます。

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

そのhttp://localhost:8080/blmdatabase/index.xhtmlため、URL は Faces サーブレットを介して解析されません。を使用する必要があります。ファイルの前に をhttp://localhost:8080/blmdatabase/faces/index.xhtml使用することに注意してください。faces/index.xhtml<welcome-file>faces/index.xhtml

この URL パターンの欠点は、Faces サーブレットが JavaScript ファイル ( .js)、スタイル ファイル ( .css)、画像 (*.png、*.jpg) などの非 facelets リソースも処理することです。より適切な Faces サーブレット マッピングは次のようになります。

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

このように、Faces サーブレットは xhtml ページのみを処理するため、 faces仮想フォルダーはもう必要ありません。http://localhost:8080/blmdatabase/index.xhtmlこの変更により、問題なくアクセスできるようになりました。

于 2013-08-01T22:51:20.247 に答える
0

クラスdataBaseSearchのメソッドを使用できます:

if(searchString != null){
//execute a query in database
// return result to a variable(resultSet or list)
}

getter と setter を使用して resultSet または List を取得し、結果をデータテーブルにレンダリングします。

于 2013-07-30T14:19:08.523 に答える