2010-06-11 50 views
1

我試圖建立一個豐富的建議,我不明白爲什麼輸入值爲空... 我的意思是,爲什麼我輸入的東西時不會採取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空,suggestionList總是空... 爲什麼輸入的值沒有發佈?

回答

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> 

也許將是有益的其他:)

0

我不確定這是否有效,但Java使用getter和setter來使用JSP封裝它的字段。既然你試圖在一個xhtml文件中使用Java,我想這就是你正在做的。

注意你怎麼樣#{suggestion.input}?在JSP中,這將導致suggestion.getInput(),這是您創建的getter。您可以撥打suggestion.SimilarSpacePaths

當它無法正確評估值時,JSP默認爲null或空字符串(我不確定是哪個)。雖然有JSP的調試插件,所以你可以告訴它,而不必編譯和檢查網頁。

這有幫助嗎?

+0

不幸的是,沒有。該方法名稱是可以的,因爲在調試模式下,該方法成功地被「捕獲」。 – 2010-06-14 08:00:58