1

さまざまな場所で、リクエストパラメータを取得するには@ManagedPropertyを使用する必要があると言われました。問題は、リクエスト文字列からトークンを取得しようとしましたが、どういうわけか常にnullのままであるということです。

ページが呼び出されているリンクは次のようになります。

http://example.com/faces/Check.xhtml?token=EC-8AT450931P272300C&ID=VKEFF29XNGNJG

豆:

@Named(value = "bean")
@RequestScoped
public class Bean implements Serializable {

    @Inject
    private AccountBean account;
    @Inject
    private Service web;
    @ManagedProperty(value = "#{param.token}")
    private String token;
    @ManagedProperty(value = "#{param.ID}")
    private String id;

    @PostConstruct
    public void init() {
        System.out.println("token: " + token);
    }

ページ

<ui:define name="content">
    <h:form>
        <pou:commandButton action="#{bean.test()}" value="complete"/>
    </h:form>
</ui:define>

そして私が試した他のこと:

Map<String, String> e = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

これにはリクエストパラメータも含まれていません。リクエストを取得できるすべてのfacesContextについても同じことが言えます。

ヘルプをいただければ幸いです。

PS私は背後にあるものを変更することはできませんか?私の手の届かないプログラムから呼び出された

4

1 に答える 1

0

うまくいきました。

@Injectは、URLを介してパラメータをCDI@NamedBeanに渡します

これは、私のサイトにさらにいくつかのものを追加するために必要なソリューションでした

<ui:define name="content">
    <h:form>
        <h:inputHidden value="#{bean.token}"/>
        <h:inputHidden value="#{bean.id}"/>
        <pou:commandButton action="#{bean.test()}" value="complete"/>
    </h:form>
</ui:define>

そして、ネーミングから#{param.xxx}の部分を削除します

@Inject @HttpParam
private String token;
@Inject @HttpParam(value = "ID")
private String id;
于 2012-04-08T12:03:39.597 に答える