丰富的建议 - 为什么输入为空? (接缝框架)

时间:2010-06-11 14:12:57

标签: java jsf richfaces seam

我正在尝试构建丰富的建议,但我不明白为什么输入值为空... 我的意思是,当我输入内容时,为什么不输入inputText值。

.xhtml代码:

<h:inputText value="#{suggestion.input}" id="text">
</h:inputText>
<rich:suggestionbox id="suggestionBoxId" for="text" tokens=",[]"
                    suggestionAction="#{suggestion.getSimilarSpacePaths()}" var="result"
                    fetchValue="#{result.path}"
                    first="0"
                    minChars="2"
                    nothingLabel="No similar space paths found"
                    columnClasses="center"
        >
    <h:column>
        <h:outputText value="#{result.path}" style="font-style:italic"/>
    </h:column>
</rich:suggestionbox>

和行动类:

@Name("suggestion")
@Scope(ScopeType.CONVERSATION)
public class Suggestion {
@In
protected EntityManager entityManager;

private String input;

public String getInput() {
    return input;
}

public void setInput(final String input) {
    this.input = input;
}

public List<Space> getSimilarSpacePaths() {
    List<Space> suggestionsList = new ArrayList<Space>();
    if (!StringUtils.isEmpty(input) && !input.equals("/")) {
        final Query query = entityManager.createNamedQuery("SpaceByPathLike");
        query.setParameter("path", input + '%');
        suggestionsList = (List<Space>) query.getResultList();
    }
    return suggestionsList;
}

}

所以,输入beeing null,suggestionList总是空的... 为什么不发布输入值?

2 个答案:

答案 0 :(得分:2)

那么, 关键是使用带参数的方法来提供丰富的建议!该参数实际上是用户在inputText中输入的内容....因此,应该是以上类而不是:

@Name("suggestion")
public class Suggestion {


@In
 protected EntityManager entityManager;

 public List<String> getSimilarSpacePaths(final Object input) {
  //prepare the list with the strings
        //...
     return suggestionsList;
     }
    }

和.xhtml:

<h:inputText id="text" size="80" value="#{accountHome.instance.creationPath}">
</h:inputText>
<rich:suggestionbox id="suggestionBoxId" for="text" tokens=",[]"
     suggestionAction="#{suggestion.getSimilarSpacePaths}" var="result"
     fetchValue="#{result}"
     first="0"
     minChars="2"
     nothingLabel="No similar space paths found"
     columnClasses="center"
     width="350"
  >
 <h:column>
  <h:outputText value="#{result}" style="font-style:italic"/>
 </h:column>
 <a:support ajaxSingle="true" event="onselect">
  <f:setPropertyActionListener value="#{result}" target="#{accountHome.instance.creationPath}"/>
 </a:support>
</rich:suggestionbox>

也许对其他人有用:)

答案 1 :(得分:0)

我不确定这是否有效,但是Java使用getter和setter来用JSP封装它的字段。由于您尝试在xhtml文件中使用Java,我认为这就是您正在做的事情。

注意你#{suggestion.input}的方式?在JSP中,这会产生suggestion.getInput(),这是您创建的getter。

以同样的方式,您可以拨打suggestion.SimilarSpacePaths

当JSP无法正确评估值时,JSP默认为null或空字符串(我不确定是哪个)。虽然有针对JSP的调试插件,所以你可以告诉它,而无需编译和检查网页。

这有帮助吗?