seam页面中调用后台的代码

     今天解决了CMS里面的一个问题:

问题描述:

     在发布模板的模块里面,当我点击这个模板里面的一个文件夹时有一个文件列出来,然后我点击它就可以弹出这个文件里面的内容同时它下面有对这个文件的"Publish" "Edit" "Download" "Close" "Delete" 这些功能的按钮,只是这个时候对这个文件的操作是readonly="true"只能看不能改,然后当我点击"Edit"的时候就可以对它修改,但是当我修改后我并没有保存起来,只是点了"Cancel"按钮,这个时候我再点击"Edit"按钮,它出现的不是原来的那份而是我刚改的没有保存的那份,所以很苦恼,这就是我今天要完成的内容。

      解决办法:(1)首先想下:

<rich:panel  style="height: 330px;" id="fileInf">
	<h:inputTextarea  value="#{webSiteTemplate.selectFile.content}" id="fileText" style="width:100%;height:300px;background-color:gray;" readonly="true" />
	<input value="#{webSiteTemplate.selectFile.relativePath}" id="filePath" style="display:none;" />
</rich:panel>

 这个是最初的那个readonly="true"的。

(2)

<rich:panel  style="height: 330px;" id="editInf">
     <h:inputTextarea value="#{webSiteTemplate.selectFile.content}" id="editText" style="width:100%;height:300px;"/>
</rich:panel>

 这个是"Edit"的显示的。

(3)分析下:当页面第一次加载的时候,其实这些值就已经加载出来了,只是当时有style="display: none;没有显示而已,所以当编辑之后它不会重新去加载value="#{webSiteTemplate.selectFile.content}" 这个值,现在想办法让它重新再加载一次。

 

解决办法一、(1)这个是我最初想到的办法:用JS的方式。

      <a:commandButton value="Edit" οnclick="openEdit();" 在原来的JS的openEdit()里面加代码,加上

document.getElementById('editInf:editText').setValue = #{webSiteTemplate.selectFile.content} ;

    这种方式的思路是正确的,但是执行就会报错的,因为JS要挑用后台的业务逻辑的代码,这种方式是不对的。

 

解决办法二、

     (1)如何在seam中用JS来调用后台方法:

         思路:添加action方法让点击"Edit"的时候调用后台方法,然后在显示的时候再调用一次。

<a:commandButton value="Edit" οnclick="openEdit();" action="#{webSiteTemplate.openEdit()}" reRender="editInf"></a:commandButton>

    (2)

private String contentTemp;
public String getContentTemp() {
	return contentTemp;
}

public void setContentTemp(String contentTemp) {
	this.contentTemp = contentTemp;
}

public void openEdit(){
	this.contentTemp = this.selectFile.getContent();
}

 

   (3)在Edit之后的那个编辑里面这样写:

<rich:panel  style="height: 330px;" id="editInf">
	<h:inputTextarea value="#{webSiteTemplate.contentTemp}" id="editText" style="width:100%;height:300px;"/>
</rich:panel>

 它原来是这样的:这时候页面加载一次它就是死的了,不能在动了,所以要写的活些才能满足需要。

<rich:panel  style="height: 330px;" id="editInf">
     <h:inputTextarea value="#{webSiteTemplate.selectFile.content}" id="editText" style="width:100%;height:300px;"/>
</rich:panel>

 

这里有个很重要的代码:就是当点击"Edit"之后如何要求上面的这个h:inputTextarea这个区域重新刷新一次,这里就用到了 reRender="editInf" 相当于重新刷新了一次。

 

这样代码就可以满足需求了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值