我有一个selectonemenu,其中选择的更改应该导航用户到相关页面.
那么,如何使用selectonemenu控件模拟命令按钮的动作处理(或者有更优雅的方法来实现这一点)?
Bal*_*usC 13
你不能为此尝试Javascript.基本上你需要让Javascript将请求提交给服务器端.在HTML <select>
元素(由JSF生成h:selectOneMenu
)中,您可以最好地使用该onchange
属性.只要用户更改元素的值,就会调用附加到此事件的任何JS.
<h:selectOneMenu onchange="this.form.submit();">
Run Code Online (Sandbox Code Playgroud)
或者如果你在写作时很懒,这个简写也是正确的:
<h:selectOneMenu onchange="submit()">
Run Code Online (Sandbox Code Playgroud)
这将input type="submit"
在同一表单(由JSF生成h:commandButton
)中提交表单和第一个下一个HTML 元素.
<h:form>
<h:selectOneMenu value="#{bean.page}" onchange="submit()" required="true">
<f:selectItem itemLabel="Select page.." />
<f:selectItems value="#{bean.pages}" />
</h:selectOneMenu>
<h:commandButton value="submit" action="#{bean.submit}" />
<h:commandButton value="other" action="#{bean.other}" /> <!-- won't be submitted -->
</h:form>
Run Code Online (Sandbox Code Playgroud)
您需要在action方法中编写逻辑,这会导致定义的导航操作faces-config.xml
发生.例:
public String submit() {
return this.page;
}
Run Code Online (Sandbox Code Playgroud)
如果你不希望使用的commandButton
,那么你也可以用滥用继续valueChangeListener
:
<h:form>
<h:selectOneMenu value="#{bean.page}" onchange="submit()"
valueChangeListener="#{bean.change}" required="true">
<f:selectItem itemLabel="Select page.." />
<f:selectItems value="#{bean.pages}" />
</h:selectOneMenu>
</h:form>
Run Code Online (Sandbox Code Playgroud)
然后在豆中你有:
public void change(ValueChangeEvent event) {
String page = (String) event.getNewValue(); // Must however be the exact page URL. E.g. "contact.jsf".
FacesContext.getCurrentInstance().getExternalContext().redirect(page);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您已经将所需的URL作为f:selectItem
值,那么您也可以只使用JS而不执行bean操作:
<h:selectOneMenu value="#{bean.page}"
onchange="window.location = this.options[this.selectedIndex].value">
<f:selectItem itemLabel="Select page.." />
<f:selectItem itemLabel="home" itemValue="home.jsf" />
<f:selectItem itemLabel="faq" itemValue="faq.jsf" />
<f:selectItem itemLabel="contact" itemValue="contact.jsf" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30747 次 |
最近记录: |