使用命令bouton primefaces更新页面

时间:2013-05-01 14:01:22

标签: html jsf jsf-2 primefaces

我想获取输入Textarea的值,并通过单击命令按钮“compiler”将其显示在同一页面中 但是我没有得到任何结果!并且只有在使用浏览器更新程序更新时才会显示contnet Sh如何更新页面和托管bean以在同一页面中显示primefaces textarea的内容 这是代码:

<p:layoutUnit position="west" size="520" header="Code à executer" resizable="true" >
    <h:form id="moncode">
 <p:inputTextarea id="mycode" value="#{fichier.code}" rows="17" cols="50" /> 
 <p:commandButton value="compiler" id="btn3"  action="guest.xhtml"   styleClass="myButtonClass" />
    </h:form>
</p:layoutUnit>

<p:layoutUnit position="east" size="550" header="Resultat d'execution" resizable="true" >
   <h:outputText value="#{fichier.code}" /> 
</p:layoutUnit>


             <p:layoutUnit position="south"  >


    

    

我的应用程序是关于编译给定的代码:我编写一个代码,然后我用“编译器”按钮执行,这样就会创建一个文件,但是文件总是用“null”创建,我认为因为var“代码“还没有在托管bean中设置我为什么要更新页面,所以在这里设置托管bean是编译:     `      私有字符串代码;     私有字符串错误;

public String getCode() {
    return code;
}

public String getError() {
    return error;
}
 public void setCode(String code) {
    this.code = code;
}

 public void compile() throws IOException {
 File file = new File("C:\\Users\\Rad1\\test.c");
 PrintWriter ecrivain;  
 ecrivain = new PrintWriter(new BufferedWriter (new FileWriter(file))); 
      ecrivain.println(code);  
  ecrivain.close();                

`

2 个答案:

答案 0 :(得分:1)

有两种方法可以实现您的目标:通过使用带有后续回发的表单的同步提交,或者通过发送AJAX请求来部分更新页面的必要部分。

同步提交

<p:inputTextarea id="mycode" value="#{fichier.code}" rows="17" cols="50" /> 
<p:commandButton value="compiler" id="btn3" action="#{fichier.action}" styleClass="myButtonClass" ajax="false" />
<h:outputText id="upd" value="#{fichier.code}" /> 

使用操作方法

public String action() {
    //do business job
    return null;
}

这样一个字段将通过回发来刷新。不要忘记bean Fichier必须是视图范围的。请注意ajax="false"的{​​{1}}属性。

AJAX调用

<p:commandButton>

使用相同的操作方法

<p:inputTextarea id="mycode" value="#{fichier.code}" rows="17" cols="50" /> 
<p:commandButton value="compiler" id="btn3" action="#{fichier.action}" styleClass="myButtonClass" update="upd" />
<h:outputText id="upd" value="#{fichier.code}" /> 

这样,在AJAX调用完成后,只会更新public String action() { //do business job return null; } 的内容。不要忘记bean <h:outputText>也应该是视图范围。请注意,必须指定Fichier的{​​{1}}属性。

答案 1 :(得分:0)

实际上,你不会自己调用动作。您的操作转发到某个页面。在设置属性和操作本身之间的JSF操作中没有竞争条件或同步问题。我建议你在行动之前阅读JSF life cycles tutorial by BalusC Aplly请求值阶段。

尝试在命令按钮上调用操作。

<p:commandButton value="compiler" id="btn3"  action="#{fichier.compile}" update="outputCode"  styleClass="myButtonClass" />

将id属性添加到输出面板,并在操作按钮中指定它。

<p:layoutUnit id="outputCode" position="east" size="550" header="Resultat d'execution" resizable="true" >
   <h:outputText value="#{fichier.code}" /> 
</p:layoutUnit>

P.S。阅读this BalusC answer以便更好地理解动作,Ajax /非Ajax请求等也是一件好事。