Почему мой перенаправленный веб-поток не может найти мой бин и использовать его? - PullRequest
0 голосов
/ 09 июня 2011

Я использую JSF2.0 с Spring Webflow 2.3.

Я пытался получить информацию о том, какая ссылка была нажата на моей странице и сколько раз она была нажата. Теперь это работает, когда я остаюсь в потоке и просто перехожу в другой поток, но когда я перенаправляю, а затем возвращаю, он просто сбрасывает мой бин. Я чувствую, что что-то упустил, но я не знаю что.

Я перепробовал все, что может подумать моя маленькая голова, и я попытался исследовать, но я думаю, что мои параметры поиска неверны, потому что все, что я нашел, не помогает.

Это мой боб:

@SessionScoped
public class CountBean implements Serializable{

private static final long serialVersionUID = 7498596369206276696L;
private static Log logger = LogFactory.getLog(CountBean.class);
private String link;
private Map<String,Integer> counter;



public CountBean(){
    if(counter == null || counter.isEmpty()){
        counter = new LinkedHashMap<String,Integer>();
    }
    link = null;
}



public void countTheCount(){
    if(link != null){
    int value;
    if(counter.containsKey(link)){
        value = counter.get(link);
        value++;
        counter.put(link, value);
    } else {
        value = 1;
        counter.put(link, value);
    }
    logger.debug("Click: "+link+" , times: "+value);
    }
}

public String getLink() {
    return link;
}

public void setLink(String link) {
    this.link = link;
}


}

А это мой поток:

<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow
    http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">

<var name="testBean" class="be.admb.myadmbresearch.beans.TestBean" />
<var name="countBean" class="be.admb.myadmbresearch.beans.CountBean" />


<view-state id="test-view" model="testBean">
    <transition on="logTest">
        <evaluate expression="testBean.testWarning()" />
        <evaluate expression="countBean.countTheCount()" />
    </transition>
    <transition on="gotoxy" to="sample-view">
        <evaluate expression="countBean.countTheCount()" />
    </transition>
    <transition on="gotoab" to="sample-redirect-view">
        <evaluate expression="countBean.countTheCount()" />
    </transition>
    <transition on="gotogoogle" to="gotoGoogle-view">
        <evaluate expression="countBean.countTheCount()" />
    </transition>
</view-state>
<view-state id="sample-redirect-view" view="externalRedirect:contextRelative:sample.html" />
<view-state id="gotoGoogle-view" view="externalRedirect:http://www.google.be" />
<view-state id="sample-view">
    <transition on="keerdekewere" to="test-view">
        <evaluate expression="countBean.countTheCount()"/>
    </transition>
</view-state>

Редактировать: Забыл добавить перенаправленный образец потока:

<var name="countBean" class="be.admb.myadmbresearch.beans.CountBean" />
<view-state id="sample-view" >
    <transition on="keerdekewere" to="test-view">
        <evaluate expression="countBean.countTheCount()"/>
    </transition>
</view-state>

<view-state id="test-view" view="externalRedirect:contextRelative:test.html" />

Если бы кто-нибудь мог мне помочь или даже придумать что-нибудь, я был бы очень благодарен.

Спасибо заранее.

Рафаэль

1 Ответ

0 голосов
/ 10 июня 2011

Я исправил это, используя HttpSession, непосредственно устанавливая счетчик каждый раз, когда я запускаю countTheCount (), теперь это, кажется, работает, но я не знаю, является ли это правильным решением, некоторые отзывы были бы хорошими.

Вот что я получил:

public CountBean(){
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    if(session != null){
        counter = (Map<String, Integer>) session.getAttribute("counter");
    if(counter == null || counter.isEmpty()){
        counter = new LinkedHashMap<String,Integer>();
        session.setAttribute("counter", counter);
    }
    }
    link = null;
}

public void countTheCount(){
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    if(link != null){
    int value;
    if(counter.containsKey(link)){
        value = counter.get(link);
        value++;
        counter.put(link, value);
        session.setAttribute("counter", counter);
    } else {
        value = 1;
        counter.put(link, value);
        session.setAttribute("counter", counter);
    }
    logger.debug("Click: "+link+" , times: "+value);
    }
}
...