Don't know how to iterate over supplied "items" in forEach&gt

I try the following
I have form , bean , servlet and JSTL
in bean I have constructor like
public MyForm(String a_item) {
this.a_item = a_item;
in servlet
MYForm uf = new MyForm(a_item);
userSession.setAttribute("underform", uf);
in jstl
I have
<c:forEach items="${sessionScope.underform}" var="found">
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr><td align="left" valign="top">
<c:if test="${found.a_item=='on' }">
<li> <input type="checkbox" name="a_item" checked></li>
</c:if>
</td>
</tr>
</table>
I GET THE ERR Don't know how to iterate over supplied "items" in &lt;forEach&gt;
HOW CAN I Persisting data by the request by as an object ??
thank you!

so you suggest the method oneConsidering that I said exactly the opposite, it is a mystery to me how you could possibly have drawn that conclusion. I don't intend to keep repeating myself or to keep clarifying statements that are already perfectly clear. If you don't understand something, please say so. But don't put words into my mouth thanks.
that means all logical will be handle on bean and not servlet is needed?Once again I have no idea what you mean by this question.
what is the role for the servlet in MVC?And I have no idea what you mean by this question either, or how it relates to this thread. A JSP is a servlet in case you didn't know.

Similar Messages

  • c:foreach Don't know how to iterate over supplied "items"

    I keep getting this error (Don't know how to iterate over supplied "items" in <forEach>) whenever i run my jsp page.
    JSP Code:
    <c:set var="page_action" value="${sessionScope.httpData.find_Fix}" />
                        <c:set var="LoadedUpdates" value="${sessionScope.hotFix.fixDetails}" />
    <c:if test="${page_action != null}" >
    <div class="hot-fix">
    <table>
    <c:forEach items="${LoadedUpdates}" var="updates" varStatus="status">
    <tr>
    <td> ${status.count} </td><td><c:out  value="${updates}" /></td>
    </tr>
    </c:forEach>
    </table>
    </div>
    </c:if>JAVA Code (Backend Bean):
    import com.sun.java.util.collections.ArrayList;
    public class HotFixLoader {  
    ArrayList fixdetails = new ArrayList();
    public HotFixLoader(){
    for (int i = 0; i < 10; i++){       
    fixdetails.add("<a href=\"#\">xxxxxx</a>, xx/xx/xxxx, xyxyxyxyxy");
    public ArrayList getFixDetails(){
    return fixdetails;
    }

    Please don't post your problem multiple times http://forum.java.sun.com/thread.jspa?threadID=720679&messageID=4157979#4157979

  • Session Problems: "Don't know how to iterate over supplied "items""

    Hi, I am developing my first application using Struts and JSP. The Action Form loads an object called reportGrid into session and I am trying to display it on a JSP page. Displaying simple variables works fine, but I can display an object. The error I receive is: Don't know how to iterate over supplied "items"
    My object is made up of a group of ArrayLists looks similar to this this:
            private List affiliateID;
         private List affiliateName;
         private List product1;
         private List product2;
         //etc for about 10 listsThe object is filled with data from a result set and placed into session like:
         HttpSession session = request.getSession();
         session.setAttribute("grid", reportGrid);The goal is to display each list in its own column in a HTML table.
    <table>
    <tr>
    <c:forEach var="affiliateName" items="${grid}">
              <td>
                   <c:out value="${affiliateName}" />
              </td>     
         </c:forEach>
         <c:forEach var="product1" items="${grid}">
              <td>
                   <c:out value="${product1}" />
              </td>     
         </c:forEach>
         <c:forEach var="product2" items="${grid}">
              <td>
                   <c:out value="${product2}" />
              </td>     
         </c:forEach>
    </tr>
    </table>I'm sure this has been asked before but I could not find any examples in the forums. I can place an ArrayList directly into session and iterate through using <c:forEach tags but when I try to do the same with an object it gives me the error " Don't know how to iterate over supplied "items" ".
    Does anyone have any examples of pulling and displaying an object in session which contains ArrayLists? I have been stuck on this same error for a while and any help will be greatly apreciated.
    James.          

    What is the type of grid?

  • How do I load creative cloud to my new laptop? its paid for under my old laptop so I don't know how to switch over.

    I need to figure out how to get into the creative cloud on my new laptop after having it downloaded on my old laptop.

    Cloud License allows 2 activations http://www.adobe.com/legal/licenses-terms.html
    -Install on a 2nd computer http://forums.adobe.com/thread/1452292?tstart=0
    -Windows or Mac does not matter... 2 on the same operating system, or 1 on each

  • I have purchased my first smart phone. iphone 5. I want to use sounds sent to me in text messages as ringtones but don't know how to move them over. Any help would be appreciated.

    I have purchased my first smart phone, an iphone 5.  I would like to use some of the sounds from text messages for ringtones but don't know how to move them over.   Any help would be appericated.

    I'm sorry, had you already pointed out the rules which stated that lines from 2 separate accounts were eligible??? I don't see anywhere in the advertisement specifically stating that lines from 2 separate accounts would be eligible, so THAT is not what's advertised, either.
    As far as I know Verizon's BOGO offers have ALWAYS been for lines on the same account. Possibly someone could chime in where they have received this offer on 2 separate accounts? The ONLY exception to this was someone getting the offer with 2 eligible lines on their account, reactivating the old phone on one of the lines and then giving one of the new phones to someone on another account.
    Sorry if you think simply because someone disagrees with you, they are being condescending. That is certainly not the case. Good luck.

  • I have realised over time I have created multiple accounts. I have bought music on my iphone and am not able to locate the account that I made most of my purchases on. I have bank statements on the purchases but don't know how to contact someone to help.

    I have realised over time I have created multiple accounts. I have bought music on my Iphone and am not able to locate the account that I made most of my purchases on. I have bank statements on the purchases but don't know  how to contact someone in Itune to help me.  PLEASE

    I don't have the app adn no expereince with it, but it appears basec on teh app description you may need it installed on your MAC as well to download the files.
    You might find help on the vendors website: http://www.nfinityinc.com/index.html

  • I don't know how I did it, but now when I am sending a text, the microphone takes over and is trying to speak what I am typing.  How do I turn it off?

    I don't know how I did it, but when I am texting, the microphone keeps coming on and tries to say what I am typing.  How do I turn this off?

    I suspect you have Voice Over on:
    Press Home.
    Tap Settings. Then double-tap Settings.
    Tap General. Then double-tap General.
    Use three fingers on the screen to scroll to Accessibility.
    Tap Accessibility. Then double-tap Accessibility.
    Tap VoiceOver. Then double-tap VoiceOver.
    Tap "On" next to VoiceOver. Then double-tap "On" to turn it off.
    You have to tap, then double-tap to select the numbers to enter your passcode.

  • Screen just froze up in middle of netflix show...has the image on screen.  Don't know how to get rid of it,start over.

    screen just froze up in middle of netflix show...has the image on screen.  Don't know how to get rid of it,start over.

    I was able to reboot...thank goodness..because this morning the screen was still frozen on the Netflix movie...full screen and no options to do anything.  So the first option was not going to work for me.
    By the time I got to work the dead battery was showing...even though it had been plugged in all night...
    So then I looked at the Apple website to make sure I knew which was the Sleep key...and then did the reset and it worked.  It's at 2% right now and I assume it's charging....I cleared out the Safari cache and closed it up.
    Option 2, the reboot with Sleep and Home buttons worked...once I held them long enough!
    Many, many thanks.
    Carole

  • I am trying to update an app, but its asking to connect to a wifi  or downlown it in itunes. I can't do either or, or maybe I just don't know how to do it. Help

    I am trying to update an app, but its asking to connect to a wifi or downlown it in itunes. There are several apps that need updating, I can't do either or, or maybe I just don't know how to do it.It's saying that the app is over 50MB. But it's not telling me which app. Help!!!!!!!!!

    Well, I just purchased Linksys wifi and hooked it up. It's running fine. When I go to my IPhone settings to see is I'm connected to a wifi, it shows that I am not connected. When I hit my wifi to see or to connect, it takes me to the wifi networks and it's showing my secured wifi as being locked and my guess wifi as not locked. How do I sign in to my own wifi network.

  • Hi!!I have some problems with the synchronization of my system, and I don´t know how I can solve this!

    My system consists of differents vi´s.Some of them are used to read analogic inputs and digital inputs, using the serial port.
    The values that I read, go through differents vi to be proccesed, and at the end, these values are written in a file, all the values in the same file.
    My problems of synchronization are:
    1. I have one vi per input, and all of them use the same serial port. How can I synchronize them to avoid serial port conflicts? (using queues??) And how can I do, to get differents number of samples/sg with every vi? I have to introduce them in differents loops?
    2. The other problem is that, for example, I want to read 8 samples/ s but I only want
    to write two samples every second. How can I do to avoid stoping the data flow?
    Maybe, my problem is that I want to see the system like
    one block, and I am ignoring that, although all the system works like a block, every part works using a different "speed". I don´t know how tools can I use to combine two ideas, working like an only system( data dependence, some vis need the data of others vi to be able to work) and working getting differents numbers of samples/s.
    I have seen that there are synchronization vis. I am going to glance at them, maybe I find something interesting but I amsure that your help will be very useful?
    Thanks in advanced!!
    Graci

    I think you are pretty much on the right track with Queues. I have implemented a very similar system myself using queues. I have even different systems connected to the serial interface, but I can synchronise them all easily using the following method:
    1) Make a VI for opening the serial port and reading the data. The data (parsed to extract the numbers required) are then stored in an array (Shift register). If the pre-determined time delay is reached (say 5 seconds) the values are averaged and written to a Queue with a defined data type. Save the VI as a VI template.
    2) Make a VI which starts an instance of this template VI for every channel you require. You can use VI Server to set values on the new front panel before you set it's property to "running". Setting a timer value for all can help ensure that the X-Axis of your timing values (if you require) are synchronised. The clue here is to define and initiate a QUEUE per channel. (RS-232_1, RS-232_2 and so on). The QUEUE name needs to be passed to the VI Template before running so that each VI running in the background has an individual link to the main program.
    The second part of this VI simply uses an array of QUEUES, polling them one after another with a timeout of, say 5 ms. If data is found, append accordingly to an XY-Graph.
    I also add in some "Auto termination" in the VI template (MAx number of values allowed in the QUEUE for example) to allow for the background processes to find out if the front-VI is still running or not. There are many different ways to do this, shoose the best for your application.
    With this approach, it's not even important what instrument is connected as long as data is written in a specified format into a known QUEUE. I have also developed systems where I can transparently (almost) drop in VI Templates for instruments with similar functionality (output data) from different suppliers.
    I would post an example, but the time it would take me to clean it up is too large. Sorry. If you have any further questions, don't hesitate to ask further questions.
    Shane.
    Using LV 6.1 and 8.2.1 on W2k (SP4) and WXP (SP2)

  • How do I turn on my ipad, I just got it and I don't know how to get to the home screen. Also, is itunes free on the ipad

    How do I turn on my ipad, I just got it and I don't know how to get to the homescreen. Everytime I turn it on there is a black screen, the white charger, and the blue itunes circle. Also, are itunes free.?

    You must activate the iPad within iTunes on your computer. Make sure you have the latest version of iTunes on your computer (read the minimum requirements for the iPad printed on the iPad box) and connect the iPad to your computer with the supplied cable to a 2.0 USB port - not a port on a hub- a port on your computer. iTunes should start and take you through the process.
    iTunes on the iPad is a store where you purchase media - it is not the music player. The iPod app is the music player. Both apps are pre installed on the iPad.

  • Can't back up my Iphone5 to my macbook pro, it tells me it may be corrupted, also I don't know how to delete the old backup to redo it

    Can't back up my Iphone5 to my macbook pro, it tells me it may be corrupted, also I don't know how to delete the old backup to redo it

    Hi Caveman337,
    Welcome to the Support Communities!  The resource below will explain how to delete an old iTunes backup.  Before you do this, I would suggest creating an iCloud backup of your iPhone. 
    Back up and restore your iPhone, iPad, or iPod touch using iCloud or iTunes - Apple Support
    http://support.apple.com/en-us/HT203977
    Back up using iCloud
    If you're using iCloud, it can automatically back up your content. Use these steps to turn on iCloud Backup:
    Tap Settings > iCloud > Backup. If you're using iOS 7 or earlier, tap Settings > iCloud > Storage & Backup.
    Tap iCloud Backup to turn it on.
    Tap Back Up Now.
    After you turn on iCloud Backup, iCloud will back up your content automatically. You can return to this screen to see when the last back up happened.
    Create and delete iPhone, iPad, and iPod touch backups in iTunes - Apple Support
    http://support.apple.com/en-us/ht4946
    Where your backups are stored
    The folder where your backup data is stored depends on your computer's operating system. Make sure the backup folder is included in your data-backup routine. iTunes places the backup files in these places:
    Mac: ~/Library/Application Support/MobileSync/Backup/
    The "~" represents your Home folder. If you don't see Library in your Home folder, hold Option and click the Go menu.
    Delete a backup
    If you want to delete a backup created by iTunes:
    Open iTunes Preferences:
    Mac: Choose iTunes > Preferences.
    Windows: Choose Edit > Preferences. Learn how to turn on menus in Windows 7 and 8.
    Click Devices. (The iOS device doesn't need to be connected.)
    iTunes will show the phone number, International Mobile Equipment Identity (IMEI) number, and serial number of the backed up iPhone when you position your mouse pointer over a backup. (Only the serial number will be shown for iPad and iPod touch). You can use this to find the backup you want to delete.
    Select the backup you want to remove.
    Click Delete Backup.
    When prompted, confirm that you want to remove the selected backup by clicking Delete Backup.
    Click OK to close the iTunes Preferences Window.
    Backups that have a date and time stamp in the backup name are copies of backups created by restoring the iOS device. The date and time in the left column are when the restore-from-backup occurred. The date and time in the right column are the last synced date; this shows how current the data is.
    I hope this information helps ....
    - Judy

  • Please a simple problem but I don't know how to solve it. After installing 16 gb of ram all is good but when I turn on the computer it is a window signaling that all is correct. How is possible to delete once and for all that window? Thank you

    Please a simple problem but I don't know how to solve it. After installing 16 gb of ram all is good but when I turn on the computer it is a window signaling that all is correct. How is possible to delete once and for all that window? Thank you

    Well then maybe you could take a screenshot because the appearance of such a window is news to me.
    Also post your OS X version and what model Mac you have. The more detail, the better. Thanks.
    To take a screenshot hold ⌘ Shift 4 to create a selection crosshair. Click and hold while you drag the crosshair over the area you wish to capture and then release the mouse or trackpad. You will hear a "camera shutter" sound. This will deposit a screenshot on your Desktop.
    If you can't find it on your Desktop look in your Documents or Downloads folder.
    When you post your response, click the "camera" icon above the text field:
    This will display a dialog box which enables you to choose the screenshot file (remember it's on your Desktop) and click the Insert Image button.
    ⌘ Shift 4 and then pressing the space bar captures the frontmost window.
    ⌘ Shift 3 captures the entire screen.
    Drag the screenshot to the Trash after you post your reply.

  • Mail.APP has been deleted and don't know how to get it back ?

    Please forgive my stupidity, But I have deleted my Mail app I don't know how but all that appears now
    in it's place on the dock is a black piece of paper with a ruler and stuff.
    Could somebody please help me out and tell how to get it back

    Insert the OSX installation Disk, and instead of proceeding to install, choose the Optional Installs -- Mail is one that can separately installed this way.
    If the Install Disk has an earlier version of OSX than you have currently arrived at by updates, then you will have to download the Combo Update for 10.5.7, and install that over the existing OSX after having installed the Mail app. This is combo is 729 MB, and is not the standalone delta update, btw.
    Ernie

  • Gantt chart: Don't know how to use the tooltipkeys and toolkeylabel

    I have a problem. Don't know how to use the tooltipkeys and toolkeylabel. I used jquery to select the gantt bars and on mouse over i was getting the task id "tid" then passing it to adf bean with serverlistener and showing a popup that is adf component with javascript. For positioning of the popup I used a button that has width and height 0 and has position absolute and gets the coordinates of the mouse.
    "div[et]" is a jquery selector that selects all the elements that have attribute et. I noticed that all the bars have that attribute as a few other attributes as well "part"...
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <f:view xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
            xmlns:dvt="http://xmlns.oracle.com/dss/adf/faces">
        <af:document title="untitled1.jsf" id="d1">
            <af:resource type="javascript" source="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"/>
            <af:resource type="javascript" source="resources/js/home.js"/>
            <af:messages id="m1"/>
            <af:form id="f1">
               <af:commandButton text="commandButton 1" id="cb1" inlineStyle="visibility:hidden; width:0; height:0" />
                <af:popup id="noteWindow" contentDelivery="lazyUncached" binding="#{homeBean.popup}">
                    <af:noteWindow id="popupWindow">
                        <af:panelFormLayout id="pfl2">
                            <af:panelLabelAndMessage label="Task id" id="plam5">
                                <af:outputText value="#{homeBean.taskId1}" id="ot64"/>
                            </af:panelLabelAndMessage>
                            <af:panelLabelAndMessage label="Start Location Name" id="plam6">
                                <af:outputText value="#{homeBean.startLocation}" id="ot7"/>
                            </af:panelLabelAndMessage>
                            <af:panelLabelAndMessage label="Stop Location Name" id="plam7">
                                <af:outputText value="#{homeBean.stopLocation}" id="ot8"/>
                            </af:panelLabelAndMessage>
                            <af:panelLabelAndMessage label="tasktype" id="pla2m7">
                                <af:outputText value="#{homeBean.taskType}" id="ot9"/>
                            </af:panelLabelAndMessage>
                        </af:panelFormLayout>
                    </af:noteWindow>
                </af:popup>
                <af:serverListener type="jsServerListener" method="#{homeBean.serverEventHandler}"/>
                <dvt:schedulingGantt id="gantt1" value="#{bindings.PersonView1.schedulingGanttModel}" var="row"
                                     startTime="2011-07-04 00:00:00" endTime="2011-07-04 23:00:00" summary="gsg"
                                     showMenuBar="false" showToolbar="false" iconPlacement="left"
                                     showTasksAsDailyBar="false">
                    <f:facet name="major">
                        <dvt:timeAxis scale="days" id="ta1"/>
                    </f:facet>
                    <f:facet name="minor">
                        <dvt:timeAxis scale="hours" id="ta2"/>
                    </f:facet>
                    <f:facet name="nodeStamp">
                        <af:column sortProperty="#{bindings.PersonView1.hints.PersonId.name}" sortable="false"
                                   headerText="#{bindings.PersonView1.hints.PersonId.label}" id="c1">
                            <af:outputText value="#{row.PersonId}" id="ot1">
                                <af:convertNumber groupingUsed="false"
                                                  pattern="#{bindings.PersonView1.hints.PersonId.format}"/>
                            </af:outputText>
                        </af:column>
                    </f:facet>
                </dvt:schedulingGantt>            
            </af:form>
        </af:document>
    </f:view>javascript:
    $(document).ready(bindEvents());
    function bindEvents() {
        $("div[et]").live('mouseover', function (e) {
             $('#cb1').css("position", 'absolute');
             $('#cb1').css("top", e.pageY-4);
             $('#cb1').css("left", e.pageX);
            var popup = AdfPage.PAGE.findComponentByAbsoluteId("noteWindow");
            var element = AdfPage.PAGE.findComponent("f1");
            var taskIdToPass = null;
            if ($(this).attr("tid") !=undefined) {
                 taskIdToPass = $(this).attr('tid').toString();
            } else {
                taskIdToPass = $(this).parent().attr('tid').toString();
            var param = {            taskId : taskIdToPass        };
            AdfCustomEvent.queue(element, "jsServerListener", param, true);
            if (!popup.isPopupVisible()) {
                var hints = {};
                hints[AdfRichPopup.HINT_LAUNCH_ID] = "cb1";
                hints[AdfRichPopup.HINT_ALIGN_ID] =  "cb1";
                hints[AdfRichPopup.HINT_ALIGN] = AdfRichPopup.ALIGN_AFTER_START;
                popup.show(hints);
        }).live("mouseout", function () {
            var popup = AdfPage.PAGE.findComponentByAbsoluteId("noteWindow");
            popup.hide();
    };My bean that is session bean:
    package view;
    import oracle.adf.model.BindingContext;
    import oracle.adf.model.binding.DCDataControl;
    import oracle.adf.view.rich.component.rich.RichPopup;
    import oracle.adf.view.rich.render.ClientEvent;
    import oracle.jbo.ApplicationModule;
    import oracle.jbo.Key;
    import oracle.jbo.Row;
    import oracle.jbo.RowSetIterator;
    import oracle.jbo.ViewObject;
    public class HomeBean {
        private RichPopup popup;
        private String taskId1;
        private String startLocation;
        private String stopLocation;
        private long taskId;
        private String taskType;
        public HomeBean() {
            super();
        public void serverEventHandler(ClientEvent clientEvent) {    
            String taskIdString = clientEvent.getParameters().get("taskId").toString();
            this.taskId = Long.parseLong(taskIdString);
            DCDataControl dc1 = BindingContext.getCurrent().findDataControl("AppModuleDataControl");
            ApplicationModule am = dc1.getApplicationModule();
            ViewObject vo = am.findViewObject("PdTrfDayView1");  
            RowSetIterator rowSetIterator = vo.createRowSetIterator(null);
            Row[] rows = rowSetIterator.findByKey(new Key(new Object[] {taskId}), 1);
            Row row = rows[0];
           this.taskId1 =  row.getAttribute("PdTrfDayId").toString();
           this.startLocation = row.getAttribute("StartLocation").toString();
           this.stopLocation = row.getAttribute("StopLocation").toString();
           this.taskType = row.getAttribute ("PdTrfTypeId").toString();
            RichPopup.PopupHints ph = new RichPopup.PopupHints();
            vo.closeRowSetIterator();
        public long getTaskId() {
            return taskId;
        public void setPopup(RichPopup popup) {
            this.popup = popup;
        public RichPopup getPopup() {
            return popup;
        public String getTaskId1() {
            return taskId1;
        public String getStartLocation() {
            return startLocation;
        public String getStopLocation() {
            return stopLocation;
        public String getTaskType() {
            return taskType;
    }I am wondering If i can use setCurrentRow on the iterator that i create and use it for displaying on the popup instead of binding startLocation and stopLocation to the bean and if there is any benefit of that at all...
    Edited by: 897833 on Nov 24, 2011 11:37 AM

    Hi,
    To use tooltipkeys and tooltiplabel in gantt, you can add following code in managed bean
    public String[] getTooltipKeys()
    return new String[]{"columnA", "columnB", "StartDate", "EndDate"};
    public String[] getTooltipLabels()
    return new String[]{"A", "B", "Start Date", "End Date"};
    where , the string array in the ToolTipKeys represents the columns, of the table you have in the gantt component , and the string array in TooltipLabels displays the label you want to display for the table columns.
    In the jsff, you could call the bean methods as follows:
    tooltipKeys="#{GanttBean.tooltipKeys}"
    tooltipKeyLabels="#{GanttBean.tooltipLabels}"

Maybe you are looking for

  • "ShellExecuteEx() failed to create process. GetLastError() = 2L" When Installing iTunes 11.1 on Windows 7 64-bit

    Hello, I get the following error (in the logs) right after hitting the install button within the iTunes 64bit installation program: Executing: C:\Users\Travis\AppData\Local\Temp\IXP651.TMP\SetupAdmin.exe /evt EFEB /pid 3872 /mon 448 460 ShellExecuteE

  • Quick question about inheritance and exceptions

    If I have two classes like this: public class ClassA {     public void myMethod() throws NumberFormatException {       throw new NumberFormatException(); public class ClassB extends ClassA {     public void myMethod() { }Does myMethod() in classA ove

  • Get PDF Dimensions without opening

    Hi, Is it possible to get the dimensions of a single page PDF without opening the file? Thanks.

  • With holding tax configuration.

    HI All, our client wants to use withholding tax for customers during the payment. I  have configured extended withholding tax in SPRO and assigned to customer master record.  also working fine when i create the invoice at FI side using FB70/F-22 for

  • Best storage set-ups for large Libraries?

    Let's say "large Library" means 500 GB and/or 500,000 Images, and above. What set-ups for storage, on a Mac maximized with RAM, will provide the best Aperture performance?  The best bang-for-the-buck?  Assume Thunderbolt is available.  I don't know m