문제

나는 그것을 사용했다 jQuery 내 자동 완성 struts2 신청.

프리하게, 내 행동은 jQuery를 사용하는 문자열 목록을 만들었습니다. 이것은 스크립트입니다.

$().ready(function() {
        $("#tag").autocomplete("/myAction/Action", {
            multiple : true,
                autoFill : true,
                    minChars:1
                });
            });

타이핑 중에 제안서와 함께 상자가 나타납니다. 문제는 상자가 다른 값을 렌더링하고 내 JSP의 코드를 정확하게 렌더링한다는 것입니다 (자동 완성 플러그인의 CSS 링크).

이것을 어떻게 해결할 수 있습니까?

이것은 내 JSP입니다.

<html>
<head>
    <script src="<%=request.getContextPath()%>/scripts/jquery-latest.js"></script>
    <link rel="stylesheet" href="<%=request.getContextPath()%>/scripts/main.css" type="text/css" />
    <link rel="stylesheet" href="<%=request.getContextPath()%>/scripts/jquery.autocomplete.css" type="text/css" />
    <script type="text/javascript" src="<%=request.getContextPath()%>scripts/jquery.bgiframe.min.js"></script>
    <script type="text/javascript" src="/<%=request.getContextPath()%>/query.dimensions.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/scripts/jquery.autocomplete.js"></script>
    <script type="text/javascript">
    $().ready(function() {
        $("#tag").autocomplete("/myAction/Action", {
            multiple : true,
                autoFill : true,
                    minChars:1
                });
            });
</script>
</head>
<body>
    <s:form action="Action" theme="simple">
        <s:iterator value="elencoMateriali" var="asd">
            <s:property value="#asd" escape="false"/>   
                    </s:iterator>
        <s:textfield id="tag" name="tagField" label="tag" />
    </s:form>
</body>

도움이 되었습니까?

해결책 2

<%@ taglib prefix="s" uri="/struts-tags" %>
    <%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

<s:form action="ActionJson" theme="simple">
    <s:url id="elencoFuffa" action="ActionJSON"/>
    <sx:autocompleter  id="autocompleter" name="materiale" loadOnTextChange="true" preload="false" href="%{elencoFuffa}" size="24" loadMinimumCount="1" showDownArrow="false" cssClass="dropDown" onchange="submit();"/>

        <s:submit value="Prosegui"/>
        <s:property value="luoghiSmaltimento"/>
    </s:form>  

이제 행동 :

public class Action extends ActionSupport {

private String materiale;
private String luoghi;
private List<String> elencoMateriali;
private Map<String, String> json;

public String execute() throws Exception {

    System.out.println("------------------" + materiale);

    return SUCCESS;
}

public String getMateriali() throws Exception {
    MaterialiDAO dao = new MaterialiDAO();
    List<Materiali> toResult = new ArrayList<Materiali>();
    toResult = dao.findAll();
    elencoMateriali = new ArrayList<String>();
    Iterator i = toResult.iterator();

    while (i.hasNext()) {
        Materiali m = (Materiali) i.next();
        elencoMateriali.add(m.getValueNomemateriale());
    }

    return SUCCESS;

}

public String getJson() throws Exception {
    json = new HashMap<String, String>();

    if (materiale != null && materiale.length() > 0) {
        MaterialiDAO dao = new MaterialiDAO();
        List<Materiali> materiali = dao.findByLikeValue(materiale);
        for (Materiali m : materiali) {
            json.put(m.getValueNomemateriale(), "" + m.getIdMateriali());
        }
    }

    return SUCCESS;
}

public String trovaLuogo() throws Exception {
    LuoghismalDAO daoL = new LuoghismalDAO();
    MaterialiDAO daoM = new MaterialiDAO();
    Materiali m = daoM.findByMaterialiName(materiale);

    if (m != null) {
        luoghi = m.getLuoghismal().getValueDescrluogo();

        return SUCCESS;

    } else {
        luoghi = "-- Scegliere un materiale --";
        return SUCCESS;
    }
}

/* Getters and setters */

결국 struts.xml

        <action name="ActionJSON" class="it.action.Action"
        method="getJson">
        <result type="json">
            <param name="root">json</param>
        </result>
    </action>

다른 팁

답이 너무 늦었다 고 생각하지만 그 문제는 여전히 Struts2에 남아 있습니다. 그러한 문제를 해결하기 위해 몇 가지 수정을했습니다.

  1. jquery.struts2.js 파일을 JS 경로에 복사하십시오.

  2. jquery.struts2.js fil을 편집하고 AutoComperter 위젯의 손잡이에서 '성공 : 함수 (data)'를 찾아 다음 기능의 기능을 교체하십시오.

    success: function(data) {
    var x = 0;
    if (data[o.list] !== null) {
        var isMap = false;
        if (!$.isArray(data[o.list])) {
            isMap = true;
        }                                   
        var result = [];
        $.each(data[o.list], function(j, val) {
            if (isMap) {
                result.push({
                    label: val.replace(
                            new RegExp(
                                    "(?![^&;]+;)(?!<[^<>]*)(" +
                                    $.ui.autocomplete.escapeRegex(request.term) +
                                    ")(?![^<>]*>)(?![^&;]+;)", "gi"
                                ), "<strong>$1</strong>" ),
                    value: val,
                    id: j
                });
            }
            else {
                if (o.listkey !== undefined && o.listvalue !== undefined) {
                    result.push({
                        label: val[o.listvalue].replace(
                                new RegExp(
                                        "(?![^&;]+;)(?!<[^<>]*)(" +
                                        $.ui.autocomplete.escapeRegex(request.term) +
                                        ")(?![^<>]*>)(?![^&;]+;)", "gi"
                                    ), "<strong>$1</strong>" ),
                        value: val[o.listvalue],
                        id: val[o.listkey]
                    });
                }
                else {
                    result.push({
                        label: data[o.list][x].replace(
                                new RegExp(
                                        "(?![^&;]+;)(?!<[^<>]*)(" +
                                        $.ui.autocomplete.escapeRegex(request.term) +
                                        ")(?![^<>]*>)(?![^&;]+;)", "gi"
                                    ), "<strong>$1</strong>" ),
                        value: data[o.list][x],
                        id: data[o.list][x]
                    });
                }
            }
            x++;
        });
        response(result);
    }
    

    }

  3. 이제 JSP 코드에서 OnSelectTopics 메소드를 구독하면 새 항목이 사용 가능하므로 ID 값을 원하는대로 숨겨진 O로 설정할 수 있습니다.

이제 AutoComperter는 강력한 단어가있는 목록을 표시하고, 선택으로 입력을 채우고, 잡을 수있는 변수로 ID를 맨테인합니다.

포함 헤더 섹션에 수정 된 JS를 추가해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top