[JBoss JIRA] Created: (RF-5411) extendedDataTable: sortMode="multi" doesn't work.
by Mikhail Vitenkov (JIRA)
extendedDataTable: sortMode="multi" doesn't work.
-------------------------------------------------
Key: RF-5411
URL: https://jira.jboss.org/jira/browse/RF-5411
Project: RichFaces
Issue Type: Bug
Affects Versions: 3.3.0
Environment: IE6, IE7, FF 3.1.3, Safari 3.1, Opera 9.62(3.3.0.BETA4)
Reporter: Mikhail Vitenkov
Assignee: Nick Belaevski
#1. Use following code(rich:extendedDataTable+panelGrid with "Sort Mode" and "Selection Mode" controls).
<h:form>
<h:panelGrid columns="2" columnClasses="top,top">
<rich:extendedDataTable value="#{capitalsBean.capitals}" var="cap"
id="table" width="580px" height="400px"
sortMode="#{extendedTableBean.sortMode}"
selectionMode="#{extendedTableBean.selectionMode}">
<rich:column sortable="false" label="Flag">
<f:facet name="header">
<h:outputText value="Flag" />
</f:facet>
<h:graphicImage value="#{cap.stateFlag}" />
</rich:column>
<rich:column sortable="true" sortBy="#{cap.state}"
filterBy="#{cap.state}" filterEvent="onkeyup" width="170px"
label="State Name">
<f:facet name="header">
<h:outputText value="State Name" />
</f:facet>
<h:outputText value="#{cap.state}" />
</rich:column>
<rich:column sortable="true" sortBy="#{cap.name}"
filterBy="#{cap.name}" filterEvent="onkeyup" width="170px"
label="State Capital">
<f:facet name="header">
<h:outputText value="State Capital" />
</f:facet>
<h:outputText value="#{cap.name}" />
</rich:column>
<rich:column sortable="false" label="Time Zone"
sortBy="#{cap.timeZone}">
<f:facet name="header">
<h:outputText value="Time Zone" />
</f:facet>
<h:outputText value="#{cap.timeZone}" />
</rich:column>
</rich:extendedDataTable>
<rich:panel>
<f:facet name="header">
<h:outputText value="Sort/Selection modes changing" />
</f:facet>
<h:panelGrid columns="2">
<h:outputText value="Sort Mode:" />
<h:selectOneMenu value="#{extendedTableBean.sortMode}">
<f:selectItem itemLabel="Single" itemValue="single" />
<f:selectItem itemLabel="Multi" itemValue="multi" />
<a4j:support event="onchange" ajaxSingle="true" reRender="table" />
</h:selectOneMenu>
<h:outputText value="Selection Mode:" />
<h:selectOneMenu value="#{extendedTableBean.selectionMode}">
<a4j:support ajaxSingle="true" event="onchange" reRender="table" />
<f:selectItem itemLabel="Single" itemValue="single" />
<f:selectItem itemLabel="Multi" itemValue="multi" />
<f:selectItem itemLabel="None" itemValue="none" />
</h:selectOneMenu>
</h:panelGrid>
</rich:panel>
</h:panelGrid>
</h:form>
#2. Set Sort Mode = "multi".
#3. Sort "Time Zone" column first by clicking on header.
#4. Sort "State Capital" column by header clicking.
#5. Verify "Time Zone" column sort order.
Actual behavior:
"Time Zone" column is unsorted like in "single" sort mode.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years, 8 months
[JBoss JIRA] Created: (RF-5422) extendedDataTable: filtering doesn't reset selection.
by Mikhail Vitenkov (JIRA)
extendedDataTable: filtering doesn't reset selection.
-----------------------------------------------------
Key: RF-5422
URL: https://jira.jboss.org/jira/browse/RF-5422
Project: RichFaces
Issue Type: Bug
Affects Versions: 3.3.0
Environment: IE6, IE7, FF 3.1.3, Safari 3.1, Opera 9.62(3.3.0.BETA4)
Reporter: Mikhail Vitenkov
Assignee: Nick Belaevski
#1. Navigate to ExtendedDataTable richfaces-demo page.
#2. Type "k" in "State Name" filter input.
#3. Select "Kansas".
#4. Remove "k" and verify selected item.
#5. Type "k" in "State Name" filter input again.
#6. Select "Kentucky".
#7. Remove "k" and verify selected item.
Actual behavior:
#4. "Alabama" selected.
#5. "Alaska" selected. So after filtering selected item index remained.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years, 8 months
[JBoss JIRA] Created: (RF-7324) rich:editor with useSeamText=true parameter, the <object ...> elements(flash video) does not display
by bb bb (JIRA)
rich:editor with useSeamText=true parameter, the <object ...> elements(flash video) does not display
----------------------------------------------------------------------------------------------------
Key: RF-7324
URL: https://jira.jboss.org/jira/browse/RF-7324
Project: RichFaces
Issue Type: Bug
Affects Versions: 3.3.1
Environment: Seam 2.11GA, RichFaces 3.3.1,Eclipse 3.3,JBoss 4.22,WinXp
Reporter: bb bb
I would like to display a flash video with rich:editor the use of useSeamText=true parameter
with <s:formattedText> displaying tags. But it doesn't work.
1.
If i use useSeamText=false I get the following error when I would like to display the value of the editor.
a.
If I remove the escape="false" parameter the <object...> is escaped, so the video is not appeared.
<h:outputText value="#{editortext}" escape="false"/> <br/> <--working version,but i get exception
b.
With the use of <s:formattedText value="#{editortext}"/> the video is not appear, because not escape parameter.
and I get the same exception.
2:57:35,609 INFO [STDOUT] invalid element 'object'
12:57:35,609 ERROR [STDERR] invalid element 'object'
12:57:35,609 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser.openTag(SeamTextParser.java:2268)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser.html(SeamTextParser.java:946)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser.body(SeamTextParser.java:2414)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser.html(SeamTextParser.java:969)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser.text(SeamTextParser.java:732)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser.startRule(SeamTextParser.java:614)
12:57:35,609 ERROR [STDERR] at com.backbone.dvc.util.TextUtil.getFormattedContent(TextUtil.java:26)
12:57:35,609 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
12:57:35,609 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
12:57:35,609 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
12:57:35,609 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.bpm.BusinessProcessInterceptor.aroundInvoke(BusinessProcessInterceptor.java:51)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103)
12:57:35,609 ERROR [STDERR] at com.backbone.dvc.util.TextUtil_$$_javassist_seam_14.getFormattedContent(TextUtil_$$_javassist_seam_14.java)
12:57:35,609 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
12:57:35,609 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
12:57:35,609 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
12:57:35,609 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
12:57:35,609 ERROR [STDERR] at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:335)
12:57:35,609 ERROR [STDERR] at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:280)
12:57:35,609 ERROR [STDERR] at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59)
12:57:35,609 ERROR [STDERR] at org.jboss.el.parser.AstValue.getValue(AstValue.java:67)
12:57:35,609 ERROR [STDERR] at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
12:57:35,609 ERROR [STDERR] at com.sun.facelets.el.ELText$ELTextVariable.toString(ELText.java:174)
12:57:35,609 ERROR [STDERR] at com.sun.facelets.el.ELText$ELTextComposite.toString(ELText.java:115)
12:57:35,609 ERROR [STDERR] at com.sun.facelets.compiler.CommentInstruction.write(CommentInstruction.java:38)
12:57:35,609 ERROR [STDERR] at com.sun.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:39)
12:57:35,609 ERROR [STDERR] at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:269)
12:57:35,609 ERROR [STDERR] at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
12:57:35,609 ERROR [STDERR] at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
12:57:35,609 ERROR [STDERR] at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:220)
12:57:35,609 ERROR [STDERR] at org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:215)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:120)
12:57:35,609 ERROR [STDERR] at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:279)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRenderer.java:78)
12:57:35,609 ERROR [STDERR] at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
12:57:35,609 ERROR [STDERR] at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
12:57:35,609 ERROR [STDERR] at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
12:57:35,609 ERROR [STDERR] at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
12:57:35,609 ERROR [STDERR] at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
12:57:35,609 ERROR [STDERR] at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
12:57:35,609 ERROR [STDERR] at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
12:57:35,609 ERROR [STDERR] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
12:57:35,609 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
12:57:35,609 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
12:57:35,609 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:510)
12:57:35,609 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
12:57:35,609 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
12:57:35,609 ERROR [STDERR] at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
12:57:35,609 ERROR [STDERR] at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
12:57:35,609 ERROR [STDERR] at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
12:57:35,609 ERROR [STDERR] at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.web.RewriteFilter.process(RewriteFilter.java:98)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.web.RewriteFilter.doFilter(RewriteFilter.java:57)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
12:57:35,609 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73)
12:57:35,656 ERROR [STDERR] at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
12:57:35,656 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
12:57:35,656 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
12:57:35,656 ERROR [STDERR] at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
12:57:35,656 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
12:57:35,656 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
12:57:35,656 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
12:57:35,656 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
12:57:35,656 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
12:57:35,656 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
12:57:35,656 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
12:57:35,656 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
12:57:35,656 ERROR [STDERR] at java.lang.Thread.run(Unknown Source)
12:57:35,656 ERROR [STDERR] Caused by: line 1:15: invalid element 'object'
12:57:35,656 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser$DefaultSanitizer.createSemanticException(SeamTextParser.java:403)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser$DefaultSanitizer.validateHtmlElement(SeamTextParser.java:281)
12:57:35,656 ERROR [STDERR] at org.jboss.seam.text.SeamTextParser.openTag(SeamTextParser.java:2256)
12:57:35,656 ERROR [STDERR] ... 111 more
The value of the editor in the database:
<object width="100" height="100" data="http://www.youtube.com/v/F4fPv450OYM" type="application/x-shockwave-flash">
<param name="quality" value="-- Not set --" />
<param name="scale" value="-- Not set --" />
<param name="salign" value="-- Not set --" />
<param name="wmode" value="-- Not set --" />
<param name="src" value="http://www.youtube.com/v/F4fPv450OYM" />
<param name="align" value="-- Not set --" />
</object>
2.
If i use useSeamText=true I don't get an error, and the video is not displayed.
the <object ...> is not saved to the database(editor value)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years, 8 months
[JBoss JIRA] Created: (RF-7419) realworld/albums: If a user tried to create the album with empty name in a shelf, this shelf would be selected in Add album window
by Inna Shchibrya (JIRA)
realworld/albums: If a user tried to create the album with empty name in a shelf, this shelf would be selected in Add album window
----------------------------------------------------------------------------------------------------------------------------------
Key: RF-7419
URL: https://jira.jboss.org/jira/browse/RF-7419
Project: RichFaces
Issue Type: Bug
Components: examples
Affects Versions: 3.3.2.CR1
Environment: All browsers
Local
Reporter: Inna Shchibrya
Assignee: Andrey Markhel
Priority: Minor
1. Login to the application.
2. Create several shelves.
3. Select the shelf and click on Add album icon. --> Add album window has appeared with selected shelf name in Shelf input field. It's ok.
4. Click on Save button. --> "may not be null or empty" message is appeared. It's ok.
5. Close Add album window.
6. Select any other shelf and click on Add album icon. --> Add album window has appeared with previous shelf name in Shelf input field.
Expected result: Add album window should appear with selected shelf name in Shelf input field.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
16 years, 8 months