我是JSF的新手,我正在尝试创建一个简单的应用程序,它采用像{a | b | c} {a | b | c}这样的内容,并像ac或ba等一样随机变化。我我做了一个将成为我的托管bean的课程(可以肯定):
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,使用上面的类生成随机变量,将set响应作为新String。
这是我的faces-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>
这是index.xhtml的一部分,其中用户将Strig像{a | b | c} {a | b | c}:
<h:form>
<h:inputText value="#{spintax.spintext}" />
<h:commandButton value="Submit" action="result" />
</h:form></p>
这是我的result.xhtml的一部分,其中应该显示新的String:
<p><h:outputText value="#{spintax.spintext}" /></p>
我做错了什么?我明白了:
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)
答案 0 :(得分:2)
问题是你试图引用<value>#{spintax.spintext}</value>
正在创建的同一个管理bean <managed-bean-name>spintax</managed-bean-name>
:
<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 强>
Param标记为与之关联的组件设置参数 封闭标签。您可以使用它来构建复合消息 替换outputFormat标记中的占位符值。身体内容 param标签必须为空。另请参阅HTML outputFormat标记。
请参阅:http://www.jsftoolbox.com/documentation/help/12-TagReference/core/f_param.html
我希望这有帮助。