Почему в конце моей минимальной страницы шва вставлен тег </html>? - PullRequest
1 голос
/ 12 августа 2011

Я уже два дня ищу ответ на свою проблему, поэтому думаю, что пришло время спросить. Надеюсь, кто-то умнее в способах JSF и Seam (это не займет много, я все еще новичок в обоих) сможет меня просветить.

У меня есть приложение Seam, которое требует раскрывающегося списка, но в которое пользователь также может ввести текст. Это позволит создавать созданные пользователем записи, а также предварительно определенные. Я пытаюсь создать этот комбинированный список с помощью плагина FlexBox jQuery. Кажется, хороший кандидат на то, что мне нужно. Мне просто нужно указать div и страницу, которая возвращает данные JSON, чтобы создать этот эффект комбинированного списка.

дополнение codes.html

...
<div>
Department: <div id="dept-dropdown" />
</div>
...

AccountComboBoxList.java

...
@Scope(SESSION)
@Name("actComboBoxAction")
public class AccountComboBoxList implements Serializable {
...
@WebRemote
public JSONObject getDepartmentJSON() {
    JSONObject returnJSON = new JSONObject();
    try {
        //if dept name is null, skip this and return empty obj
        if(deptName!=null) {
            JSONArray returnArray =
                JsonDataHelper.convertAcctToolEnt2JsonArray(deptName);
            returnJSON = new JSONObject();
            returnJSON.put("results",returnArray);
            logger.info("JSON results: "+returnJSON);
        }
    } catch (JSONException je) {
        logger.warn("JSONException thrown!");
        logger.warn(je.getMessage());
        je.printStackTrace();
    } finally {
        return returnJSON;
    }
}
...

deptString.xhtml - полностью

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:s="http://jboss.com/products/seam/taglib">

<h:outputText value="#{actComboBoxAction.getDepartmentJSON()}" />

</ui:composition>

Затем в моем файле JavaScript я просто создаю комбинированный список с этой строкой:

...
$("#test-string").flexbox('./includes/deptString.seam');
...

Проблема возникает на этом этапе. deptString.seam правильно вызывает метод seam и успешно возвращает JSONObject. Но комбинированный список не работает правильно, потому что в конце строки стоит символ ''. Например, я скопировал и вставил это из полученного «Источника просмотра» страницы:

{"results":[{"id":"1","name":"Dept1"},{"id":"2","name":"Dept2"},{"id":"3","name":"Dept3"}]}</html>

Что добавляет этот посторонний тег и существует ли какой-либо способ избавиться от него? Я создал текстовый файл с правильным JSON-файлом и вызвал этот файл в метод .flexbox (). Комбо-бокс работал тогда как рекламируется, поэтому я знаю, что код flexbox работает. Я также попытался удалить весь код JSF из файла deptString.xhtml, и в нем была только одна строка #{actComboBoxAction.getDepartmentJSON()}. Это вызвало 'com.sun.facelets.FaceletException: Ошибка синтаксического анализа /include/deptString.xhtml: Traced Error [line: 1] Содержимое запрещено в прологе. ошибка.

Как я уже сказал, я новичок в JSF и Seam. Если есть очевидный / лучший способ получить простую строку из бэкэнда во внешний интерфейс в приложении Seam / JSF, я весь в ушах.

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 12 августа 2011

Если ваш javascript был в файле facelet (xhtml), вы должны быть в состоянии сделать

$("#test-string").flexbox('#{actComboBoxAction.getDepartmentJSON()}'); 

Смешивание JSF EL в файле JavaScript упоминает некоторые способы достижения этого

...