1

Webアプリケーションで使用するカスタムタグライブラリをJavaで開発しました。

理由はわかりませんが、doTag()がCookieをまったく設定していません。キャッシュをクリアし、コンピューターも再起動しました。コードは次のとおりです。

public class UserVersionOfSite extends EvenSimplerTagSupport {

    private static final Log logger = LogFactory.getLog(UserVersionOfSite.class);
    private StringWriter sw = new StringWriter();



    @Override
    public void doTag() throws IOException, JspException {

                 getJspBody().invoke(sw);   //get the tag body and put it in StringWriter object

                //get request object to get cookie value
                PageContext ctx = (PageContext)getJspContext();
                HttpServletRequest httpServletRequest = (HttpServletRequest) ctx.getRequest();
                HttpServletResponse httpServletResponse = (HttpServletResponse) ctx.getResponse();

                    if(httpServletRequest.getParameterMap().containsKey("show_full_site"))  {

                        logger.debug("show_full_site ");





                                   if(!checkIfCookieExists(httpServletRequest)){


                                         Cookie cookie = new Cookie("SHOW_FULL_SITE",httpServletRequest.getParameter("show_full_site"));
                                         cookie.setMaxAge(86400);



                                         httpServletResponse.addCookie(cookie);

                                                //write the tag output
                                               if(!httpServletRequest.getParameter("show_full_site").equalsIgnoreCase("true")){
                                                   //write the response
                                                   getJspContext().getOut().println(sw.toString());
                                               }
                                    }else{

                                       String cookieValueString = getCookieValue(httpServletRequest.getCookies(),"SHOW_FULL_SITE","false");

                                       if(!cookieValueString.equalsIgnoreCase("true")){

                                           //write the response
                                           getJspContext().getOut().println(sw.toString());

                                       }



                                    }

                    }



    }


    @Override
    public String getResult() throws IOException {

                  return "User version of site";
    }


    public String getCookieValue(Cookie[] cookies,
                                        String cookieName,
                                        String defaultValue) {
        for(int i=0; i<cookies.length; i++) {
            Cookie cookie = cookies[i];
            if (cookieName.equals(cookie.getName()))
                return(cookie.getValue());
        }
        return(defaultValue);
    }

    public boolean checkIfCookieExists(HttpServletRequest httpServletRequest){

        logger.debug("inside checkIfCookieExists()");

        boolean cookiePresent = Arrays.asList(httpServletRequest.getCookies()).contains( "SHOW_FULL_SITE" );



        return cookiePresent;
    }
}

if elseステートメントを使用せずにコードを追加しようとしましたが、それでも成功しませんでした。私が見逃している重要なものはありますか?

アイデアはありますか??!!! ブラウザの設定も確認しましたが、Cookieの作成を妨げるものは何もありません!

4

2 に答える 2

0

checkIfCookieExists() メソッド内の次の行が間違っています:

Arrays.asList(httpServletRequest.getCookies()).contains( "SHOW_FULL_SITE" );

HttpServletRequest.getCookies() は Cookie[] を返します。リスト内にラップし、この中に文字列「SHOW_FULL_SITE」をチェックしています。

質問に戻りますが、Cookie が HTTP ヘッダーに設定されていないことをどのように確認できますか? firebug などのブラウザー プラグインを使用して、サーバーからの HTTP 応答ヘッダーを確認してみてください。また、応答に追加する前に Cookie のパスを設定します。

 Cookie cookie = new Cookie("SHOW_FULL_SITE",httpServletRequest.getParameter("show_full_site"));
 cookie.setMaxAge(86400); 
 cookie.setPath("/");
于 2013-01-30T13:07:43.400 に答える