2010-11-30 3 views
0

私は、場所の要求パラメータを受け取り、次に情報を生成するページを持っています。 たとえば、http://example.com/xxx/weather.jsf?place=californiaです。 これを行う目的は、ユーザーがリンクをブックマークできるようにすることです。 weather.jsfでIceface 2.0 commandLink部分送信が機能しません。

、2のoutputTextとのcommandLinkありますmanagedBeanで

Humidity : <ice:outputText value="#{weatherBean.humidity}"/> 
Visibility : <ice:outputText value="#{weatherBean.visibility}"/> 
<ice:commandLink id="likeButton" 
    value="Like" 
    actionListener="#{weatherBean.doLike}" /> 

@ManagedBean(name="weatherBean") 
@RequestScoped 
public class WeatherBean 
{ 
String humidity; 
String visibility; 
int numLike; 

@PostConstruct 
    public void init() 
{ 
    System.out.println("init called"); 
    HttpServletRequest request= (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    String place = request.getParameter("place"); 
    setHumidity(WeatherDao.getHumidity(place)); 
    setVisibility(WeatherDao.getVisibility(place)); 
    setNumLike(GeneralDao.getNumLike()); 
} 

public void doLike(ActionEvent event) 
{ 
    System.out.println("doLike called"); 
    GeneralDao.addNumberLike(); 
} 
} 

さてさて、完全に生成されたページが。 しかし、doLikeコマンドリンクをクリックすると、 が最初にinitメソッドを起動し、その後doLikeメソッドを呼び出します。 要求パラメータが空であるため、他の値はすべてリセットされます。 ページの更新またはinitメソッドの呼び出しを防止する方法はありますか? 私はpartialsubmitまたは即座に試みましたが、運はありません。

答えて

1

Beanは@RequestScopedなので、JSFライフサイクルを実行した後、次のリクエストが来るまでBeanインスタンスが失われ、Beanの新しいインスタンスが取得され、PostContructが再実行されます。

@ViewScopedのように、Beanのスコープをより長いものに変更してみてください。

関連する問題