Java <;h:选择一个功能表>;不';不要解雇听众
我不熟悉JSF主题,并开发了一个简单的web对话框: 我目前的问题是:我的selectOneMenu组件不会启动actionListener,也不会重新启动其他组件。 这是我的JSF页面:Java <;h:选择一个功能表>;不';不要解雇听众,java,jsf,richfaces,Java,Jsf,Richfaces,我不熟悉JSF主题,并开发了一个简单的web对话框: 我目前的问题是:我的selectOneMenu组件不会启动actionListener,也不会重新启动其他组件。 这是我的JSF页面: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@page language="java" contentType="text/html; charset=ISO-8859-1" pageEncodi
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
<link href='styles/kn.css' rel="styleSheet" type="text/css" />
</head>
<style>
.top {
vertical-align: top;
}
</style>
<body>
<f:view>
<f:loadBundle basename="messages" var="msg" />
<h:form id="navigation">
<%@include file="include/kn_header.jsp"%>
</h:form>
<h:form >
<rich:panel styleClass="mainPanel" header="#{msg.log_title}"
id="logviewer">
<h:selectOneMenu value="#{logviewer.machine} " onchange="submit()" immediate="true">
<f:selectItems value="#{logviewer.machineList}" />
<a4j:support event="onchange"
actionListener="#{logviewer.processValueChanged}"
ajaxSingle="true" immediate="true" reRender="progressPanel" />
</h:selectOneMenu>
<rich:spacer height="10px" />
<a4j:outputPanel id="progressPanel"
rendered="#{logviewer.isMachine}">
<rich:progressBar value="#{logviewer.currentValue}" interval="1000"
label="#{logviewer.currentValue} %" enabled="#{logviewer.enabled}"
minValue="-1" maxValue="100" reRenderAfterComplete="progressPanel">
<f:facet name="initial">
<br />
<a4j:commandButton action="#{logviewer.startProcess}"
value="Start Download" reRender="progressPanel"
rendered="#{logviewer.buttonRendered}"
style="margin: 9px 0px 5px;" />
</f:facet>
<f:facet name="complete">
<br />
<rich:spacer height="10px" />
<a4j:commandButton id="doDownload"
action="#{logviewer.doDownload}" value="button"
alt="#{msg.download}" title="#{msg.download}"
image="#{icon.download}">
<rich:toolTip value="#{msg.download}"
style="background-color:#{richSkin.generalBackgroundColor}; border-color:#{richSkin.headerBackgroundColor}">
</rich:toolTip>
</a4j:commandButton>
<div class="TextArea">
<rich:panel styleClass="mainPanel">
<h:inputTextarea id="logView" value="#{logviewer.log}"
rows="35" style="font-size:10pt; width:100%" readonly="true" />
</rich:panel>
</div>
</f:facet>
</rich:progressBar>
</a4j:outputPanel>
</rich:panel>
</h:form>
</f:view>
</body>
</html>
.顶{
垂直对齐:顶部;
}
他是我的豆:
package com.kn.documentserver.jsf;
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import com.kn.commons.util.BeanLocator;
import com.kn.dcs.distribution.DownloadFile;
import com.kn.documentserver.entity.Machine;
import com.kn.documentserver.interfaces.IMachine;
public class LogviewerBean extends AbstractBean {
// private final static Logger LOG =
// Logger.getLogger(AdministrationBean.class);
private List<SelectItem> machineList;
private Machine machine;
private int maxlength;
private String logfile= null;
private DownloadFile logFile;
private boolean buttonRendered = true;
private boolean enabled = false;
IMachine s = BeanLocator.lookup(IMachine.class,
"java:global/KN_DocumentServerFrontendJBoss/MachineBean");
public LogviewerBean() {
super();
machineList = new ArrayList<SelectItem>();
initMachineList(readMachineList());
}
private List<Machine> readMachineList() {
return s.findAll();
}
private void initMachineList(List<Machine> machines) {
for (Machine m : machines) {
if (m.getMachineName().contains("KN")
&& !m.getMachineName().equals("ASKNGHST")
&& !m.getMachineName().equals("ASKNITRA")) {
SelectItem item= new SelectItem(m.getMachineName(),m.getMachineName());
machineList.add(item);
}
}
}
public List<SelectItem> getMachineList() {
return machineList;
}
public void changeEvent() {
System.out.println("Works");
}
public void setMachineList(List<SelectItem> machineList) {
this.machineList = machineList;
}
public Machine getMachine() {
return machine;
}
public String getLog() {
return logfile;
}
// public GenericConverter getMachineConverter() {
//
// return new GenericConverter(machineList.values());
// }
public void setMachine(Machine machine) {
this.machine = machine;
}
public String processValueChanged(ValueChangeEvent vce) {
String temp = (String) vce.getNewValue();
this.machine=s.findByName(temp);
return null;
}
public void doshowLog() {
setMachine(this.machine);
}
public int getMaxlength() {
return maxlength;
}
public void setMaxlength(int maxlength) {
this.maxlength = maxlength;
}
public boolean getIsMachine() {
return (this.machine == null) ? false : true;
}
public String getLogfile() {
return logfile;
}
public String startProcess() {
setEnabled(true);
setButtonRendered(false);
logFile = new DownloadFile(machine);
System.out.println(getTotalValue());
logFile.start();
return null;
}
public void setLogfile() {
byte[] bytes = logFile.getLogfileAsbyte();
if (bytes != null) {
this.logfile = new String(bytes);
}
}
public boolean getIsLogfileDownloaded() {
return (this.logfile == null) ? false : true;
}
public long getTotalValue() {
return logFile.getFilelength();
}
public Long getCurrentValue() {
if (isEnabled()) {
Long current = new Long(logFile.getCurrfilelength());
current = (current * 100) / getTotalValue();
if (current >= 100) {
setButtonRendered(true);
setLogfile();
return Long.valueOf(101);
} else {
return current;
}
} else {
return Long.valueOf(-1);
}
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public boolean isButtonRendered() {
return buttonRendered;
}
public void setButtonRendered(boolean buttonRendered) {
this.buttonRendered = buttonRendered;
}
}
package com.kn.documentserver.jsf;
导入java.util.ArrayList;
导入java.util.List;
导入javax.faces.event.ValueChangeEvent;
导入javax.faces.model.SelectItem;
导入com.kn.commons.util.BeanLocator;
导入com.kn.dcs.distribution.DownloadFile;
导入com.kn.documentserver.entity.Machine;
导入com.kn.documentserver.interfaces.IMachine;
公共类LogviewerBean扩展了AbstractBean{
//专用最终静态记录器日志=
//getLogger(AdministrationBean.class);
私人名单机械师;
私人机器;
私有整数最大长度;
私有字符串logfile=null;
私有下载文件日志文件;
private boolean buttonRendered=true;
启用私有布尔值=false;
IMachine s=BeanLocator.lookup(IMachine.class,
“java:global/KN_DocumentServerFrontendJBoss/MachineBean”);
公共LogviewerBean(){
超级();
machineList=新的ArrayList();
initMachineList(readMachineList());
}
私有列表readMachineList(){
返回s.findAll();
}
私有void initMachineList(列出机器){
用于(机器m:机器){
如果(m.getMachineName()包含(“KN”)
&&!m.getMachineName().equals(“ASKNGHST”)
&&!m.getMachineName().equals(“ASKNITRA”)){
SelectItem item=newselectItem(m.getMachineName(),m.getMachineName());
机械师添加(项目);
}
}
}
公共列表getMachineList(){
返回机械师;
}
public void changevent(){
System.out.println(“工程”);
}
public void setMachineList(列表machineList){
this.machineList=machineList;
}
公共机器getMachine(){
返回机;
}
公共字符串getLog(){
返回日志文件;
}
//公共GenericConverter getMachineConverter(){
//
//返回新的GenericConverter(machineList.values());
// }
公共无效设置机器(机器){
这个机器=机器;
}
公共字符串processValueChanged(ValueChangeEvent vce){
字符串温度=(字符串)vce.getNewValue();
this.machine=s.findByName(temp);
返回null;
}
公共无效doshowLog(){
设置机器(this.machine);
}
public int getMaxlength(){
返回最大长度;
}
公共void setMaxlength(int maxlength){
this.maxlength=maxlength;
}
公共布尔getIsMachine(){
返回(this.machine==null)?false:true;
}
公共字符串getLogfile(){
返回日志文件;
}
公共字符串startProcess(){
setEnabled(真);
setButtonRendered(假);
日志文件=新下载文件(机器);
System.out.println(getTotalValue());
logFile.start();
返回null;
}
public void setLogfile(){
byte[]bytes=logFile.getLogfileAsbyte();
如果(字节数!=null){
this.logfile=新字符串(字节);
}
}
公共布尔getIsLogfileDownloaded(){
返回(this.logfile==null)?false:true;
}
公共长getTotalValue(){
返回logFile.getFilelength();
}
公共长getCurrentValue(){
如果(isEnabled()){
Long current=new Long(logFile.getCurrfilelength());
当前=(当前*100)/getTotalValue();
如果(当前>=100){
setButtonRendered(true);
setLogfile();
长期回报率(101);
}否则{
回流;
}
}否则{
返回Long.valueOf(-1);
}
}
公共布尔值isEnabled(){
返回启用;
}
已启用公共void集(已启用布尔值){
this.enabled=已启用;
}
公共布尔值isButtonRendered(){
返回按钮未指定;
}
public void setButtonRendered(布尔按钮rendered){
this.buttonRendered=buttonRendered;
}
}
你能帮我调查一下到底出了什么问题吗
问候
Alex如果您使用的是JSF 1.2或更高版本,请在第二个表单(包含selectOneMenu)中添加prependId=“false”。否则(使用1.2之前的JSF),您需要为表单设置一个id,并将其添加到reRender(reRender=“formId:progressPanel”)您使用的是哪个JSF版本?我想2.0版请确定确切的JSF版本。所有代码都是JSF1.2风格的,您使用的是JSP而不是Facelets,而JSP由于JSF2.0而被弃用。至于具体问题,请排除第5点,谢谢您的重播。我已经将id添加到表单:和reRender:reRender=“log:progressPanel”中,不幸的是它不起作用。Bean类中的方法没有调用。很抱歉,太晚了。你能确定你妈妈的方法吗