JSF中如何写js代码提交到JSF的管理Bean的一个方法中

悬赏:10 发布时间:2008-06-23 提问人:tony.zou (初级程序员)

请问在JSF中如何写js代码提交到JSF的管理Bean的一个方法中

faces-config.xml代码片段
         <managed-bean>
		<managed-bean-name>loginAction</managed-bean-name>
		<managed-bean-class>
			com.test.action.login.LoginAction
		</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
         </managed-bean>


java代码片段
public class LoginAction {
	public String sayHello() {
		System.out.println("hello");
		return "main";
	}
}


jsp代码片段
   <h:form>
      <h:commandButton action="#{loginAction.sayHello} type="button" onclick="sayHello()"/>
   </h:form>


js代码片段
function sayHello(){
   请问这里应该如何让上面的<h:commandButton>提交到LoginAction.sayHello()中}


先感谢大牛了!

采纳的答案

2008-06-23 jones (中级程序员)

JSF判断用户点击的哪个Command组件是根据请求参数中包含的command组件的ID判断的,如果你的form的id 为myform,你的commandButton为mybutton,那么一旦你的request中包含参数名为myform:mybutton的参数(参数值随便取),JSF就会执行拥有这个ID的Command组件绑定的Action方法。
我一般用jquery的form插件通过ajax提交form,同时在请求参数中追加上我想触发的Action绑定在页面中的组件的id,这个效果和普通的点击页面上的Command组件是一样的,不过通过jquery实现了异步提交form并触发后台某个Action方法,好处就是你可以把这个过程通过js注册到页面上任何元素上
例如:
function save(isShowState,isValidate){
$.blockUI('<img src="images/loading.gif" />',{border: '0px',filter: 'alpha(opacity=50)'});
var result = false;
var options = {
type: 'GET',
data: {'infoForm:saveButton': 'ajaxSaveButton'},
success: successCallBack,
cache: false,
async: false,
error: function(){
alert('保存过程中发生未知错误!');
}
}

if(isValidate){//需要校验
options.beforeSubmit = infoFormOnSubmit;
}

$('#infoForm').ajaxSubmit(options);
function successCallBack(){
result = true;
if(isShowState){
alert('基本信息保存成功!');
}
}
$.unblockUI();
return result;

}

提问者对于答案的评价:
不好意思!前段时间一直没有上网!到今天才结贴,sorry!

其他回答

<h:form id="frm" >  
   <h:commandButton id="btn" action="#{loginAction.sayHello} <SPAN style="COLOR: red">type="button"</SPAN> onclick="sayHello()"/>  
</h:form> 


注意form,button都加了id

function sayHello(){   
    document.getElementById("frm:btn").click();
}
careprad (初级程序员) 2008-06-25