0

検索ボタンをクリックすると、index.xhtmlで結果のある別のページに移動しようとしています。私はprimefacesJSFを使用しています。

私の問題は、次のページに移動できないことです。searchController Beans findItemメソッドを呼び出していますが、結果のページは変更されません。index.xhtmlページにとどまります。

誰かアイデアがありますか?

@ManagedBean(name="sController")
@RequestScoped
public class SController implements Serializable {
    private static final long serialVersionUID = 1L;

    public SController() { }

    public String findItem() {
        System.out.println("findItem called!");

        return "success";
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
} 

これが私のfaces-config.xmlです。

<?xml version="1.0" encoding="UTF-8"?>
<faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

<navigation-rule>
    <from-view-id>/index.xhtml</from-view-id>
    <navigation-case>
        <from-action>#{sController.findItem}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>/items.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>
</faces-config>

そして、これが私のindex.xhtmlです。

<f:view>
<h:form>
    <p:panel id="search" header="Search Item">
        <p:panelGrid columns="2" cellpadding="5">

            <h:outputLabel value="Name" for="name"/>
            <p:inputText id="name" value="#{sController.name}"/>

        </p:panelGrid>
    </p:panel>

    <p:commandButton value="Search" 
        actionListener="#{sController.findItem}"/>
</h:form>
</f:view>
4

2 に答える 2

3

これは回避策です。同じ問題でこのページにアクセスする可能性のある他の人の利益のために、actionListener属性で使用しているメソッド式はそこで使用されるべきではないため、ページはナビゲートできませんでした(ActionListenerタイプのメソッドのみが許可されています)。代わりにaction、コマンドボタンの属性でそのメソッドを使用してください。

インターフェイスを正しく実装するメソッドActionListenerのreturnタイプはでvoidあり、その結果、JSFベースのナビゲーションを暗黙的に実行することはありません。ただし、タイプを返す通常のメソッド式Stringは、JSFベースのナビゲーションに使用されるものです。

于 2012-10-09T01:00:59.990 に答える
2
  1. あなたのfaces-configファイルを削除します(あなたが指摘したように)
  2. actionListenerをactionに置き換えます。

    <p:commandButton value="Search" action="#{sController.findItem}"/>

  3. 返された文字列に追加して、成功ページfaces-redirect=trueにリダイレクトします。

    public String findItem() {
        System.out.println("findItem called!");
    
        return "success?faces-redirect=true";
    }
    
于 2012-10-09T05:12:31.523 に答える