AMcoder - javascript, python, java, html, php, sql

JSTL Hashmap և դինամիկ բանալին

Էջի իմ doGet-ում ես տեղադրում եմ որոշ լռելյայն ատրիբուտներ:

    private static final CategoryFactory cf = CategoryFactory.getInstance();

public static void setupHeader(HttpServletRequest req) {
    ArrayList<String> catagories = cf.getPrimaryCategories();
    Map<String, ArrayList<String>> categoryMap = cf.getCategoryMap();
    User user = UserUtils.getUserSession(req);

    req.setAttribute("catagories", catagories);
    req.setAttribute("categoryMap", categoryMap);
    req.setAttribute("isAdmin", UserUtils.isAdmin(user));
    if (user != null) {
        req.setAttribute("orderCount", user.getOrderCount(false));
        req.setAttribute("unreadMessageCount", user.getUnreadMessageCount());
        req.setAttribute("cartTotal", user.getShoppingCart().getTotal());
    }
}

Այնուհետև իմ JSP էջում ես փորձում եմ աշխատել «Map» կատեգորիայի հետ՝ հիմնվելով այն կատեգորիաների վրա, որոնք Քարտեզի բանալիներն են:

<c:forEach var="cata" items="${catagories}">
<li class="dropdown-submenu"><a tabindex="-1" href="#"><c:out value="${cata}" /></a>
<ul class="dropdown-menu" role="menu">

    <c:forEach var="secCategories" items="${categoryMap['cata']}">
        <c:forEach var="second" items="${secCategories}">
            <li role="presentation"><a role="menuitem"
                href="/browse?type="${fn:replace(second, ' ','+')}"><c:out
                        value="${second}" /></a></li>
        </c:forEach>
    </c:forEach>

</ul></li>
</c:forEach>

Իմ ստացած սխալն այն է

ԶԳՈՒՇԱՑՈՒՄ. Տեղադրված է javax.servlet.ServletException՝ javax.servlet.jsp.JspException՝ javax.el.PropertyNotFoundException. Չհաջողվեց գտնել հատկություն [Aerial & Lifting Equipment դասի java.lang.String՝ javax.NotFoundFoundException։ սեփականություն [Aerial & Lifting Equipment in class java.lang.String

Որտեղ «[Aerial & Lifting Equipment»-ը փոփոխականների կատեգորիաներից առաջին բանալին է և դրված է որպես նոր փոփոխական ${cata}: Քանի որ սա չի աշխատում, ես ինչ-որ բան բացակայում եմ, թե ինչպես ճիշտ փոխանցել դինամիկ բանալին:

ԼՈՒԾՈՒՄ
Սա շտկեց իմ խնդիրը, ես սահմանեցի ատրիբուտների տեսակները, որոնք նախկինում մոռացել էի, և հեշտ օգտագործման համար ես փոխեցի ArrayList-ը տողի[]:

<%@attribute name="user" required="true" type="com.entity.User"%>
<%@attribute name="catagories" required="true" type="java.lang.String[]"%>
<%@attribute name="categoryMap" required="true" type="java.util.Map"%>

<c:forEach var="cata" items="${catagories}">
<li class="dropdown-submenu"><a tabindex="-1" href="#"><c:out value="${cata}" /></a>
<ul class="dropdown-menu" role="menu">
<c:forEach var="secCategories" items="${categoryMap[cata]}">
    <c:forEach var="second" items="${secCategories}">
        <li role="presentation"><a role="menuitem"
            href="/browse?type="${fn:replace(second, ' ','+')}"><c:out
                    value="${second}" /></a></li>
    </c:forEach>
</c:forEach>
</ul></li>
</c:forEach>
13.03.2015

  • Ստուգե՞լ եք ձեր HashMap-ը: Արդյո՞ք այն ունի ArrayList հիմնական օդային և բարձրացնող սարքավորման դեմ: 13.03.2015
  • @alfreema catagories=[Aerial & Lifting Equipment, Asphalt & Concrete Equipment, Attachments, Compaction Equipment, Construction Equipment, Earthmoving Equipment, Forestry & Mining Equipment] categoryMap={Օդային և ամբարձիչ սարքավորում=[Ամբողջ տեղանքով կռունկ, բեռնատար վերելակ, բեռնատար, հիդրավլիկ բեռնատար կռունկ, նյութերի բեռնաթափիչ, անձնակազմի վերելակ, կոպիտ տեղանքով կռունկ, մկրատ վերելակ, հեռավար, հեռադիտակային բեռնատար, անտառային տեխնիկա Crawler Tractor, Feller Buncher, Forwarder, Harvester, Log Loader, Rock Truck, Shovel, Skidder, Wheel Dozer, Wheel Loader]} 13.03.2015

Պատասխանները:


1

Դու կբարկանաս քեզ վրա, բայց…

<c:forEach var="secCategories" items="${categoryMap['cata']}">

պետք է լինի

<c:forEach var="secCategories" items="${categoryMap[cata]}">

Դուք չեք ցանկանում, որ բառացի «cata» տողը լինի բանալին, դուք ցանկանում եք, որ cata էջի հատկության արժեքը լինի բանալին: :)

13.03.2015
  • Ես հանեցի մենակ չակերտները և դեռ ստանում եմ նույն սխալը. Չհաջողվեց գտնել հատկություն [Aerial & Lifting Equipment դասում java.lang.String 13.03.2015

  • 2

    Ես հեռացրեցի միայնակ չակերտները և փոխեցի կատեգորիաների արժեքը ArrayList-ից դեպի String[]: Բայց ես մոռացել էի նաև էջի վերևում սահմանել հատկանիշի տեսակները: Այսպիսով, նրանք պարզապես լարերի պես էին գործում:

    <%@attribute name="user" required="true" type="com.entity.User"%>
    <%@attribute name="catagories" required="true" type="java.lang.String[]"%>
    <%@attribute name="categoryMap" required="true" type="java.util.Map"%>
    
    13.03.2015
  • Հրաշալի է, ուրեմն հիմա աշխատում է: Ն.Վ.Մ.- Ես տեսնում եմ, որ վերևում այն ​​աշխատում է հարցի մեջ: Գերազանց։ 14.03.2015

  • 3
    <!--Iterate Map entries -->
    <c:forEach items="${categoryMap}" var="entry">
             <!--For Each Entry iterate the value -->
             <!-- use ${entry.key} if you need the key -->
             <c:forEach var="second" items="${entry.value}">
                <li role="presentation"><a role="menuitem"
                    href="/browse?type="${fn:replace(second, ' ','+')}"><c:out
                            value="${second}" /></a></li>
            </c:forEach>
    </c:forEach>
    

    https://stackoverflow.com/a/1835742/1356423

    13.03.2015

    4

    Փորձեք հետևյալ լուծումը.

    <c:forEach var="cata" items="${catagories}">
    <li class="dropdown-submenu"><a tabindex="-1" href="#"><c:out value="${cata}" /></a>
    <ul class="dropdown-menu" role="menu">
    
        <c:forEach var="secCategories" items="${categoryMap}">
            <c:forEach var="second" items="${secCategories}">
               <c:choose>
                   <c:when test="${fn:toLowerCase(second) == fn:toLowerCase(cata)}">
                       <li role="presentation"><a role="menuitem"
                    href="/browse?type="${fn:replace(second, ' ','+')}"><c:out
                            value="${second}" /></a></li>
                   </c:when>
               </c:choose>
    
            </c:forEach>
        </c:forEach>
    
    </ul></li>
    
    13.03.2015
    Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..