1

ターゲット ページでバッキング Bean が異なるページからビュー パラメータが渡されないことがわかりました。製品パラメーターを test1.xhtml から test2.xhtml に渡すにはどうすればよいですか?

test.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:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui">

<body>
    <f:metadata>
        <o:viewParam name="product" value="#{holder.value}"
            converter="#{productConverter}"
            converterMessage="Bad request. Unknown product." required="true"
            requiredMessage="Bad request. Please use a link from within the system." />
    </f:metadata>
    <h:link outcome="/test2.xhtml" includeViewParams="true">link</h:link>

</body>
</html>

test2.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:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui">

<h:head></h:head>
<body>
    <f:metadata>
        <o:viewParam name="product" value="#{holder2.value}"
            converter="#{productConverter}"
            converterMessage="Bad request. Unknown product." required="true"
            requiredMessage="Bad request. Please use a link from within the system." />
    </f:metadata>
    <h:link outcome="/test.xhtml" includeViewParams="true">link</h:link>
</body>
</html>

ホルダー.java

@ManagedBean
@ViewScoped
public class Holder<T> implements Serializable {
    private T value;

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }


}

Holder2.java

@ManagedBean
@ViewScoped
public class Holder2<T> implements Serializable {
    private T value;

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }


}

製品.java

public class Product {

    private String name;

    public Product(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }



}

製品コンバーター

public class ProductConverter implements Converter {

        private Map<String,Product> productMap=new HashMap<String, Product>();

        public ProductConverter(List<Product> products) {
            for (Product product:products){
                productMap.put(product.getName().toLowerCase(), product);
            }
        }

        @Override
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
            return productMap.get(value.toLowerCase());
        }

        @Override
        public String getAsString(FacesContext context, UIComponent component, Object value) {
              if (!(value instanceof Product) ) {
                    return null;
                }

                return ((Product) value).getName().toLowerCase();
        }





    }
4

2 に答える 2

1
<h:link outcome="/test2.xhtml?includeViewParams=true">link</h:link>

これは、JSF にビュー パラメータを .xml ファイルに含める正しい方法ではありません<h:link>。クエリ文字列パラメーターとして指定することは、コンポーネントactionの属性でのみ有効です。UICommand

代わりにincludeViewParams属性が<h:link>必要です。

<h:link outcome="/test2.xhtml" includeViewParams="true">link</h:link>
于 2012-12-27T13:23:01.457 に答える
0

@ViewScopedポストバックにのみ有効です。URLを変更すると、Beanは停止します。

ファセット間でパラメータを渡すには、次を使用します<ui:param>

于 2012-12-27T11:15:37.847 に答える