1

会社のすべての内部アプリケーション用のファセットテンプレートを作成しています。その外観は、ユーザーが選択したスキンに基づいています(Gmailテーマなど)。

ユーザーの好みのスキンをCookieに保存することは理にかなっています。

私の「ユーザー設定」WARはこのCookieを見ることができます。ただし、他のアプリケーションはCookieを見つけることができません。それらは、ユーザー設定WARと同じドメイン/サブドメインにあります。

これには何か理由がありますか?

これが私の豆で、好みの肌を作成/見つけるために使用されます。この同じファイルがすべてのプロジェクトで使用されます。

// BackingBeanBase is just a class with convenience methods. Doesn't 
// really affect anything here.
public class UserSkinBean extends BackingBeanBase {

    private final static String SKIN_COOKIE_NAME = "preferredSkin";

    private final static String DEFAULT_SKIN_NAME = "classic";


    /**
     * Get the name of the user's preferred skin. If this value wasn't set previously, 
     * it will return a default value.
     * 
     * @return
     */
    public String getSkinName() {

        Cookie skinNameCookie = findSkinCookie();

        if (skinNameCookie == null) {
            skinNameCookie = initializeSkinNameCookie(DEFAULT_SKIN_NAME);
            addCookie(skinNameCookie);
        }

        return skinNameCookie.getValue();

    }


    /**
     * Set the skin to the given name. Must be the name of a valid richFaces skin.
     *     
     * @param skinName
     */
    public void setSkinName(String skinName) {

        if (skinName == null) {
            skinName = DEFAULT_SKIN_NAME;
        }

        Cookie skinNameCookie = findSkinCookie();

        if (skinNameCookie == null) {
            skinNameCookie = initializeSkinNameCookie(skinName);
        }
        else {
            skinNameCookie.setValue(skinName);    
        }

        addCookie(skinNameCookie);
    }

    private void addCookie(Cookie skinNameCookie) {
        ((HttpServletResponse)getFacesContext().getExternalContext().getResponse()).addCookie(skinNameCookie);
    }

    private Cookie initializeSkinNameCookie(String skinName) {

        Cookie ret = new Cookie(SKIN_COOKIE_NAME, skinName);
        ret.setComment("The purpose of this cookie is to hold the name of the user's preferred richFaces skin.");

        //set the max age to one year.
        ret.setMaxAge(60 * 60 * 24 * 365);
        ret.setPath("/");
        return ret;
    }


    private Cookie findSkinCookie() {
        Cookie[] cookies = ((HttpServletRequest)getFacesContext().getExternalContext().getRequest()).getCookies();

        Cookie ret = null;
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals(SKIN_COOKIE_NAME)) {
                ret = cookie;
                break;
            }
        }

        return ret;
    }
}

誰かが私が間違っていることを見ることができますか?

更新:少し絞り込みました... FFでは問題なく動作しますが、IEはまだそれを好きではありません(もちろん)。

ありがとう、ザック

4

2 に答える 2

0

ドメイン/サブドメインをCookieに割り当てる必要があると思います。

のように(ドメインはドットで始まる必要があることに注意してください)

ret.setDomain(".test.com");
ret.setDomain(".test.co.uk");

http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Cookies.html

于 2009-08-25T13:54:33.500 に答える
0

私は解決策を見つけました。

クライアント側でjavascriptを使用してCookieを作成しました。

これはうまくいきました。

于 2009-09-17T20:57:36.397 に答える