即使单击jsf,按钮的参数也始终为空
Params of button always empty even after clicking jsf
我正在打开一个包含表单的模式。我正在尝试检查 #{empty param['buttonid']}
是否单击了按钮。但是点进去还是空的
<div class="modal fade" jsf:id="dataReset">
<div class="modal-dialog">
<form jsf:id="reset-data-form" class="form-horizontal">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Modal Header</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="inputEmail" class="col-sm-3 control-label">Email</label>
<div class="col-sm-9">
<input type="text" class="form-control"
jsf:id="inputEmail" jsf:value="#{dataResetFacade.dataResetEmail}"
name="inputEmail" />
<h:message for="inputEmail" p:class="error-msg"/>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-default"
data-dismiss="modal">#{msg['general.button.cancel']}</button>
<button class="btn btn-primary" jsf:id="reset-data-button"
jsf:action="#{dataResetFacade.resetdata}">submit
<f:ajax execute="@form" render="@form aaa bbb messages" onevent="close"/>
</button>
<h:outputText id="aaa" value="#{not empty param['reset-data-button']}"/>
<h:outputText id="bbb" value="#{empty param['reset-data-button']}"/>
</div>
</div>
</form>
</div>
</div>
我是不是做错了什么。
您没有在此处指定正确的请求参数名称。请求参数名称基本上是 JSF 组件的客户端 ID。 JSF 输入和按钮组件的客户端 ID 由 HTML 元素的 name
属性表示。您可以通过右键单击查看 JSF 生成的 HTML 输出来找到它,在网络浏览器中查看源代码。
鉴于当前视图,将如下所示:
<button name="reset-data-form:reset-data-button" ... />
相应地更改参数名称:
<h:outputText id="aaa" value="#{not empty param['reset-data-form:reset-data-button']}" />
<h:outputText id="bbb" value="#{empty param['reset-data-form:reset-data-button']}" />
或者,只需绑定 JSF UIComponent
instance to an unique variable name in Facelet scope using binding
attribute and then let JSF evaluate the UIComponent#getClientId()
。
<button jsf:binding="#{resetButton}" ... />
...
<h:outputText id="aaa" value="#{not empty param[resetButton.clientId]}" />
<h:outputText id="bbb" value="#{empty param[resetButton.clientId]}" />
注意:不要将其绑定到 bean 属性。上面的代码是原样。
另请参阅:
- How does the 'binding' attribute work in JSF? When and how should it be used?
我正在打开一个包含表单的模式。我正在尝试检查 #{empty param['buttonid']}
是否单击了按钮。但是点进去还是空的
<div class="modal fade" jsf:id="dataReset">
<div class="modal-dialog">
<form jsf:id="reset-data-form" class="form-horizontal">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Modal Header</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="inputEmail" class="col-sm-3 control-label">Email</label>
<div class="col-sm-9">
<input type="text" class="form-control"
jsf:id="inputEmail" jsf:value="#{dataResetFacade.dataResetEmail}"
name="inputEmail" />
<h:message for="inputEmail" p:class="error-msg"/>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-default"
data-dismiss="modal">#{msg['general.button.cancel']}</button>
<button class="btn btn-primary" jsf:id="reset-data-button"
jsf:action="#{dataResetFacade.resetdata}">submit
<f:ajax execute="@form" render="@form aaa bbb messages" onevent="close"/>
</button>
<h:outputText id="aaa" value="#{not empty param['reset-data-button']}"/>
<h:outputText id="bbb" value="#{empty param['reset-data-button']}"/>
</div>
</div>
</form>
</div>
</div>
我是不是做错了什么。
您没有在此处指定正确的请求参数名称。请求参数名称基本上是 JSF 组件的客户端 ID。 JSF 输入和按钮组件的客户端 ID 由 HTML 元素的 name
属性表示。您可以通过右键单击查看 JSF 生成的 HTML 输出来找到它,在网络浏览器中查看源代码。
鉴于当前视图,将如下所示:
<button name="reset-data-form:reset-data-button" ... />
相应地更改参数名称:
<h:outputText id="aaa" value="#{not empty param['reset-data-form:reset-data-button']}" />
<h:outputText id="bbb" value="#{empty param['reset-data-form:reset-data-button']}" />
或者,只需绑定 JSF UIComponent
instance to an unique variable name in Facelet scope using binding
attribute and then let JSF evaluate the UIComponent#getClientId()
。
<button jsf:binding="#{resetButton}" ... />
...
<h:outputText id="aaa" value="#{not empty param[resetButton.clientId]}" />
<h:outputText id="bbb" value="#{empty param[resetButton.clientId]}" />
注意:不要将其绑定到 bean 属性。上面的代码是原样。
另请参阅:
- How does the 'binding' attribute work in JSF? When and how should it be used?