为什么在我的最小Seam页面的末尾插入了一个标签?

时间:2011-08-11 20:00:42

标签: ajax json jsf jquery-plugins seam

我一直在寻找我的问题的答案两天了,所以我花时间问一下。希望有人在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代码有效。 我还尝试从deptString.xhtml文件中删除所有JSF代码,并在文件中只有单行#{actComboBoxAction.getDepartmentJSON()}。这导致'com.sun.facelets.FaceletException:Error Parsing /includes/deptString.xhtml:Error Traced [line:1] prolog中不允许内容。错误。

就像我说的,我是JSF和Seam的新手。如果在Seam / JSF应用程序中有一个明显/更好的方法从后端到前端获取一个简单的String,那我就听见了。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您的javascript位于facelet(xhtml)文件中,那么您应该可以

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

Mixing JSF EL in a JavaScript file提到了实现这个目标