2012-04-29 2 views
1

클래스 counterBean을 가지고 있고 (두 개의 별도 카운터에 대해) 내 JSP에서 counterBean의 인스턴스 두 개를 인스턴스화하려고합니다. 어떻게하면 좋을까요?Java beans는 동일한 JSP로 여러 인스턴스가 있습니다

편집 - 추가 된 코드

package beans; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 

@ManagedBean(name="CounterBean") 
@SessionScoped 
public class CounterBean implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 
    private static int hitCount; 

    public CounterBean() 
    { 
     CounterBean.hitCount = 0; 
    } 

    public static int getCounter() 
    { 
     hitCount++; 
     return hitCount; 
    } 

    public static void setCounter(int hitCount) 
    { 
     CounterBean.hitCount = hitCount; 
    } 

    public static int getValue() 
    { 
     return hitCount; 
    } 
} 
+0

내가 생각할 수있는 유일한 것은 두 가지 다른 카운터 클래스를 만드는 것이지만 너무 많이 보인다. – omegaFlame

+0

'[jsf-2.0]'질문에 태그를 붙였습니다. 당신은 * 정말로 * 사용되지 않는 JSP 뷰 기술을 사용하고 있습니까? 왜 그 후계자 Facelets하지 않니? (XML 기반). – BalusC

+0

순전히 교육적입니다. 방금 언급 한 것처럼 더 나은 방법이 있다는 것을 알고 있습니다. 자습서를 따라하면서 jsp에서 어떻게하는지 궁금합니다. – omegaFlame

답변

1

는 JSP의 코드에서 직접 객체를 생성하지 않는 것이 좋다. JSP는보기 만해야하기 때문에. JSP 페이지에서 스크립틀릿을 사용하는 것은 좋지 않습니다. 그것은 <jsp:useBean> 태그를 사용하는 것이 좋습니다 : 태그 <jsp:set Property>

<jsp:setProperty name="firstCounterId" property="myNumber" value="123"/> 

을 적용

<jsp:useBean id="firstCounterId' class="yourpackagename.CounterBean" /> 
<jsp:useBean id="secondCounterId' class="yourpackagename.CounterBean" /> 

을 특정 카운터의 값을 변경하지만 내가 생각하는 변화와 빈에서를 사용하여 거의 모든 문제 JSP를 태그를 사용하여 해결할 수 있습니다. <c:set><c:out>

+0

감사합니다. 클래스의 getCounter() 메소드를 사용하여 카운터를 증가 시키려고합니다. 위의 방법을 사용하면 어떻게됩니까? – omegaFlame

+0

이 방법으로 카운터의 값을 변경하려면''를 사용할 수 있습니다. 현재 값을 가져 오려면''태그를 사용하십시오. 여기서'number'는 counterBean의 속성입니다. 더 자세한 답변을 보려면 코드를 봐야합니다. – kapand

+0

@Andrey Kapelchik – omegaFlame

-1

방법에 대한

CounterBean cb1 = new CounterBean(); 
CounterBean cb2 = new CounterBean(); 
+0

이것은 JSF에 적합하지 않습니다 –

0

일반적으로 수행하는 것처럼 카운터 빈을 만듭니다.

,
@Named(value="counterBean") 
@SessionScoped 
public class CounterBeanClass implements Serializable { 

    private int counter = 0; 

    public CounterBeanClass() { 
    } 

    public int getCounter() { 
     return counter; 
    } 

    public void setCounter(int counter) { 
     this.counter = counter; 
    } 

    public String addCounterValue() { 
     this.counter++; 
     return ""; 
    } 
} 

그런 다음, 생성 또는 지금 당신이 분리 콩 등 모두 카운터를 호출 할 수 있습니다 faces-config.xml 파일

<managed-bean> 
    <managed-bean-name>anotherCounterBean</managed-bean-name> 
    <managed-bean-class>my.backingbean.CounterBeanClass</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

에 새로운 관리 빈을 추가합니다.

<h:form> 
    <h:panelGrid columns="2"> 
     <h:outputText value="Counter 1" /> 
     <h:outputText value="#{counterBean.counter}" /> 
     <h:outputText value="Counter 2" /> 
     <h:outputText value="#{anotherCounterBean.counter}" /> 
     <h:commandButton value="Add Counter 1" 
      action="#{counterBean.addCounterValue}" /> 
     <h:commandButton value="Add Counter 2" 
      action="#{anotherCounterBean.addCounterValue}" /> 
    </h:panelGrid> 
</h:form> 
+0

이 답변에 기초한 코드 추가 : http://stackoverflow.com/a/7583648/1065197 –

관련 문제