0

URL から view-parameter をチェックし、Bean の init-method を呼び出してそのユーザーを取得する Web ページを作成しました。そのページのフィールドには、そのユーザーの情報が入力されます。

しかし、何かがうまくいかない。

マイ Facelets ページ:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Tweetpage of #{userBean.getName()}</title>
    </h:head>
    <h:body>
        <f:metadata>
            <f:viewParam name="user" value="#{userBean.name}" />
            <f:event type="preRenderView" listener="#{userBean.init}" />
        </f:metadata>
        <h:commandButton value="Login" action="#{loginBean.login()}" id="login" />
        <div class="namebox">
            <label>User: #{userBean.name} </label> <br/>
            <br/>
        </div>
</h:body>
</html>

そして UserBean.java:

package beans;

import ...

@Named
@RequestScoped
public class UserBean implements Serializable {
    private String userName;
    private String name;
    private String bio;
    private String web;
    private Collection<Tweet> tweets;
    private Collection<User> followers;
    private User user;
    @Inject
    private @Named(value = "kwetterService")
    KwetterService service;

    @PostConstruct
    public void init(ComponentSystemEvent event) throws AbortProcessingException {
        System.out.println(name);
        user = service.find(name);
        if (user != null)
        {
            name = user.getName();
            bio = user.getBio();
            web = user.getWeb();
            tweets = user.getTweets();
            followers = user.getFollowing();
        }
    }
}

が呼び出されていないためSystem.out.println(name)、Web ページが init を呼び出しているとは思えません。URL 適応なしで Web ページを開始すると ( http://localhost:8080/KwetterJSF/)、次のエラー メッセージが表示されます。

WELD-000049 beans.UserBean@3c836d3d で [メソッド] @PostConstruct public beans.UserBean.init(ComponentSystemEvent) を呼び出せません

パラメータ ( ) を追加するとhttp://localhost:8080/KwetterJSF/index.xhtml?user=Sjaak、次のようになります。

User: #{userBean.name}  

私はこれについてあまり経験がなく、自分で少し調べてもわかりません。誰かが解決策を知っていますか?

4

1 に答える 1

1

2つの問題があります。


まず、 と混合<f:event>してい@PostConstructます。

は、引数を取らない@PostConstructメソッドのみです。それは例外を説明しています。その注釈を取り除きます。ビューパラメータが役割を果たすと、とにかく早く実行されます。

以下も参照してください。


次に、JSF ページを適切に実行するには、ブラウザのアドレス バーに表示される URL パターンが にFacesServlet登録されているものと一致することを確認する必要があります/WEB-INF/web.xml。たとえば の場合は、 ではなく URL で*.jsfページを開くようにする必要があります。そうしないと、JSF タグ/コンポーネントと EL 式が認識されず、「プレーン テキスト」として扱われます。/page.jsf/page.xhtml

FacesServletただし、 の URL パターンに を直接マッピングする方がはるかに優れています*.xhtml。これにより、仮想 URL の頭痛の種から解放されます。

于 2012-10-08T19:07:55.933 に答える