0

我想通过单击命令按钮“编译器”来获取输入 Textarea 的值并在同一页面中显示它,但是我没有得到任何结果!并且仅当我使用浏览器更新程序 Sh 更新时才显示 contnet 我如何更新页面和托管 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“code”不是但是在托管 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();                

`

4

2 回答 2

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;
}

这样,将通过回发来刷新字段。不要忘记 beanFichier必须是视图范围的。注意 的ajax="false"属性<p:commandButton>

AJAX 调用

<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}" /> 

用同样的动作方法

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

这样只有<h:outputText>AJAX 调用完成后才会更新的内容。不要忘记 beanFichier也应该是视图范围的。请注意,必须指定id属性 of 。<h:outputText>

于 2013-05-01T14:44:59.953 回答
0

实际上,您并没有调用动作本身。您的操作转发到某个页面。在设置属性和操作本身之间的 JSF 操作中不存在竞争条件或同步问题。我建议你阅读BalusC Aplly request values phase run before the action的 JSF 生命周期教程。

尝试对命令按钮调用操作。

<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>

PS 阅读此 BalusC 答案以更好地理解操作、Ajax/非 Ajax 请求等也很好。

于 2013-05-02T06:48:23.960 回答