我正在尝试构建丰富的建议,但我不明白为什么输入值为空... 我的意思是,当我输入内容时,为什么不输入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总是空的... 为什么不发布输入值?
答案 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的调试插件,所以你可以告诉它,而无需编译和检查网页。
这有帮助吗?