5

下のページのコマンドボタンをクリックすると、ナビゲーションが失敗します。(ボタンをクリックすると、ページが更新され、URLパラメーターが削除され、インデックスページに移動する代わりに、必要なエラーメッセージが表示されます)

ただし、必要な属性を削除するか、f:ajaxタグを削除すると、ナビゲーションは正常に機能します。

com.sun.facesJSF2.1.13およびprimefaces3.4の使用。

<!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">

<h:head></h:head>

 <f:metadata>
        <f:viewParam name="product"
            required="true" requiredMessage="Bad request. Please use a link from within the system."/>
    </f:metadata>

<body>

    <h:form id="form">
        <h:selectBooleanCheckbox>
            <f:ajax update="form" />
        </h:selectBooleanCheckbox>
        <h:commandButton value="buy" action="/index.xhtml?faces-redirect=true" />
    </h:form>

</body>
</html>
4

1 に答える 1

14

これはupdate="form"不注意な過度の単純化であり、実際に使用するつもりrender="@form"であり、PrimeFacesなどと混同していると思います。

具体的な問題に戻ると、これは、ビューパラメータの処理もトリガーする非ajaxポストバックを実行することによって引き起こされます。

ポストバック以外でのみ必須にする(ただし、Beanがビュースコープであることを確認してください)。

<f:viewParam ... required="#{not facesContext.postback}" />

またはポストバックにも渡します

<h:commandButton ...>
    <f:param name="product" value="#{bean.product}" />
</h:commandButton>

または、ビュースコープのBeanをすでに使用している場合は、代わりにOmniFacesを使用してください。<o:viewParam>ポストバックのビューパラメータは処理されません。

<... xmlns:o="http://omnifaces.org/ui">
...
<o:viewParam ... />
于 2012-12-25T01:30:38.127 に答える