考虑以下 JSF(和 jQuery Mobile)标记:
<h:form>
<a href="#login" data-rel="popup">Please login</a>
<h:outputText id="greeting" value="Welcome, you have logged in" rendered="#{sessionScope.login == null ? false : true}"/>
<div id="login" data-role="popup">
<h:inputText value="#{requestScope.userName}"/>
<h:inputHidden value="#{requestScope.password}"/>
<h:commandButton value="login" action="#{loginBacking.processLogin}">
<f:ajax execute="@form" render="greeting"/>
</h:commandButton>
</div>
</h:form>
显然,上面的标记不会将用户输入发送到服务器,因为 jQuery Mobile 弹出窗口需要<h:form/>
在弹出窗口中添加标签。但是,如果我将<h:form/>
标签放在弹出窗口中,我将无法使用<f:ajax render="greeting"/>
(因为 id "greeting" 留在了外面)。
如何在不使用样板 Javascript 代码的情况下克服这个问题?