We all know that XPages URLs are case sensitive. So for a page “Domino_ViewState.xsp”, you cannot use “domino_viewstate.xsp”.
However, what’s not so widely known is that the URLs are only case sensitive after the first character. So both “Domino_ViewState.xsp” and “domino_ViewState.xsp” will work for opening the XPage. However, although both will work, there can then be problems with functionality that uses those values as strings.
One of those is the Pager Save State control. If you do not set globalRows="true" then it needs to store the state for a specific view control (dataIterator) on a specific XPage. That page name is retrieved from FacesContext.getViewRoot().getPageName();. So it’s just getting the page name from the current URL. That means if some places you use “Domino_ViewState.xsp” and some places “domino_ViewState.xsp”, you’re storing two different page states – one against “d” and one against “D”. This can result in unpredictable behaviour, with the correct state not appearing to be saved. The case sensitivity issue is an example of something that’s a less obvious thing to track down, but a much simpler thing to track down and fix.