【问题标题】:Java JSF spintax contains cyclic referencesJava JSF spintax 包含循环引用
【发布时间】:2014-11-09 20:58:44
【问题描述】:

我真的是 JSF 的新手,我正在尝试制作一个简单的应用程序,它采用 {a|b|c} {a|b|c} 等内容并生成 a c 或 b a 等随机变化。我'已经创建了一个类,它将成为我的托管 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;
    }
}

我要做的是从简单的形式中获取字符串,使用上面的类生成随机变化一个集合响应作为一个新的字符串。

这是我的 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 的一部分,其中应该显示新字符串:

    <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)

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    问题是您试图引用 &lt;value&gt;#{spintax.spintext}&lt;/value&gt; 正在创建的同一管理 bean &lt;managed-bean-name&gt;spintax&lt;/managed-bean-name&gt;

    <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>
    

    faces-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

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-03-16
      • 2011-11-02
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 2013-09-19
      • 2011-06-15
      相关资源
      最近更新 更多