2014-11-09 4 views
0

저는 JSF를 처음 접했고 {a | b | c} {a | b | c}와 (과) 같은 무작위 유사 콘텐츠를 사용하는 간단한 앱을 만들려고합니다. 내 관리 빈 것 클래스를 만들었 AC 또는 바 등 (그것은 확실히 괜찮습니다) :Java JSF spintax에는 순환 참조가 포함되어 있습니다.

import java.io.Serializable; 
import java.util.Random; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Spintax implements Serializable { 

    private String spinText; 

    public void setSpinText(String spinText) { 
     this.spinText = spinText; 
    } 

    public String setSpintax(String spinText) { 
     Random rnd = new Random(); 
     String pat = "\\{[^{}]*\\}"; 
     Pattern ma; 
     ma = Pattern.compile(pat); 
     Matcher mat = ma.matcher(spinText); 
     while (mat.find()) { 
      String segono = spinText.substring(mat.start() + 1, mat.end() - 1); 
      String[] choies = segono.split("\\|", -1); 
      spinText = spinText.substring(0, mat.start()) 
        + choies[rnd.nextInt(choies.length)].toString() 
        + spinText.substring(mat.start() + mat.group().length()); 
      mat = ma.matcher(spinText); 
     } 
     return spinText; 
    } 
} 

가 난 할 노력하고있어, 단순한 형태에서 문자열을 얻을 위의 클래스를 사용하는 것입니다 설정된 응답을 새로운 String으로 임의의 변형을 생성합니다. 여기

내 얼굴-confix.xml입니다 : 여기
<managed-bean> 
     <managed-bean-name>spintax</managed-bean-name> 
     <managed-bean-class>resources.Spintax</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
     <managed-property> 
      <property-name>spinText</property-name> 
      <property-class>java.lang.String</property-class> 
      <value>#{spintax.spintext}</value> 
     </managed-property> 
    </managed-bean> 

사용자가 {| B | C A}처럼 Strig을두고 index.xhtml의 일부 {A | B | C} :

<h:form> 
       <h:inputText value="#{spintax.spintext}" /> 
       <h:commandButton value="Submit" action="result" /> 
       </h:form></p> 

<p><h:outputText value="#{spintax.spintext}" /></p> 

내가 잘못 뭐하는 거지 :

여기에 새로운 문자열 표시해야 내 result.xhtml의 일부인가? 내가 얻을 :

HTTP Status 500 - Unable to create managed bean spintax. The following problems were found: 

javax.servlet.ServletException: Unable to create managed bean spintax. The following problems were found: Managed bean spintax contains cyclic references. Evaluation path: spintax -> spintax. javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

답변

1

문제는 당신이 <managed-bean-name>spintax</managed-bean-name>을 작성되는 동일한 관리 빈을 <value>#{spintax.spintext}</value>를 참조하려고 :

<managed-property> 
    <property-name>spinText</property-name> 
    <property-class>java.lang.String</property-class> 
    <value>#{spintax.spintext}</value> 
</managed-property> 

당신이 다음 요청에 spintext의 값을 전달해야하는 경우 태그 f:param을 사용할 수 있습니다 다음과 같이

index.xhtml :

<h:form> 
    <h:inputText value="#{spintax.spintext}" /> 
    <h:commandButton value="Submit" action="result"> 
     <f:param name="spintext" value="#{spintax.spintext}" /> 
    </h:commandButton> 
</h:form> 

면-config.xml에 :

<managed-bean> 
    <managed-bean-name>spintax</managed-bean-name> 
    <managed-bean-class>resources.Spintax</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>spinText</property-name> 
     <property-class>java.lang.String</property-class> 
     <value>#{param.spintext}</value> 
    </managed-property> 
</managed-bean> 

F : PARAM
는 파람 태그는 둘러싸는 태그와 연관된 요소에 대한 매개 변수를 설정한다. 에 의해 복합 메시지를 작성하는 데 사용할 수 있으며 outputFormat 태그의 자리 표시 자 값을 대체합니다. param 태그의 본문 내용 은 비어 있어야합니다. HTML outputFormat 태그를 참조하십시오.

참조 : http://www.jsftoolbox.com/documentation/help/12-TagReference/core/f_param.html

나는이 도움이되기를 바랍니다.

관련 문제