我想获取输入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();
`
答案 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}}属性。
<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请求等也是一件好事。