ビュースコープマネージドBeanのPOSTコンストラクトメソッドでquery-stringパラメータへのアクセス

StackOverflow https://stackoverflow.com//questions/23022831

  •  21-12-2019
  •  | 
  •  

質問

次のXHTMLページがあります。

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <h:head>
        <title>Test</title>
    </h:head>

    <f:metadata>
        <f:viewParam name="id" value="#{testManagedBean.id}" maxlength="20"/>
    </f:metadata>

    <h:body>
        <h:form id="form" prependId="true">

        </h:form>
    </h:body>
</html>
.

管理対象Beanは上記のJSFページに対応しています。

@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable
{
    private static final long serialVersionUID = 1L;
    private Long id;

    @PostConstruct
    private void init() {
        System.out.println("id = "+id);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}
.

URL - idを使用して、https://localhost:8181/Project-war/admin_side/Test.jsf?id=1をquery-stringパラメータとして渡します。

idメソッドでinit()を表示しようとすると、常にnullです。

これはデモです。実際には、<f:viewParam>は実際に<ui:define name="metaData">の内側に配置され、マスターテンプレート<ui:insert name="metaData"/>が定義されています。

私はここから見下ろしていますか?

iは、このようなパラメータを数回渡し、適切なコンバータを使用してJPAエンティティに変換されますが、スカラー値が管理対象Beanのプロパティに設定されていない理由はわかりません。idのタイプを文字列に変更しようとしましたが、どちらもヘルプがありませんでした(NOR @ManagedProperty(value="#{id}")が機能しました)。

役に立ちましたか?

解決

f:viewParamの値は、@PostConstructの間は利用できません。代わりにf:viewActionを使用してください。

参照

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top