богатые предложения - почему вход нулевой? (каркас шва) - PullRequest
1 голос
/ 11 июня 2010

Я пытаюсь создать богатые предложения, и я не понимаю, ПОЧЕМУ входное значение равно нулю ... Я имею в виду, почему значение 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;
}

}

Таким образом, входной сигнал равен нулю, offertionList всегда пуст ... Почему входное значение не публикуется?

Ответы [ 2 ]

2 голосов
/ 15 июня 2010

Ну, ключ в том, чтобы использовать метод с параметром для богатого предложения!Этот параметр фактически является тем, что пользователь вводит в этом 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 голосов
/ 11 июня 2010

Я не уверен, допустимо ли это, но Java использует методы получения и установки для инкапсуляции своих полей с помощью JSP.Так как вы пытаетесь использовать Java в файле xhtml, я предполагаю, что это то, что вы делаете.

Обратите внимание, как вы #{suggestion.input}?В JSP это приведет к suggestion.getInput(), который является созданным вами геттером.

Во многом таким же образом вы бы назвали suggestion.SimilarSpacePaths.

JSP по умолчанию нулевым илипустая строка (я не знаю какая), когда она не может правильно оценить значение.Однако для JSP существуют плагины для отладки, так что вы можете сказать это без необходимости компилировать и проверять веб-страницу.

Помогло ли это?

...