没有为命名空间 struts 2 映射的操作

There is no action mapped for namespace struts 2

我正在将 INR 转换为美元,反之亦然。当我 运行 时,我收到此警告:

WARNING [http-nio-8084-exec-22] com.opensymphony.xwork2.util.logging.commons.CommonsLogger.warn Could not find action or result
 There is no Action mapped for namespace / and action name netbeans-tomcat-status-test. - [unknown location]

动作文件是ConverterAction.java

package com.vishal;

import com.opensymphony.xwork2.ActionSupport;
import java.math.BigDecimal;

public class ConverterAction extends ActionSupport {
private String from;
private String to;
private BigDecimal amount;
private BigDecimal result;

public String excecute() {
ConverterBean n = new ConverterBean();
result = n.convert(from, to, amount);
return SUCCESS;
}

public String getFrom() {
return from;
}

public void setFrom(String from) {
this.from = from;
}

public String getTo() {
return to;
}

public void setTo(String to) {
this.to = to;
}

public BigDecimal getAmount() {
return amount;
}

public void setAmount(BigDecimal amount) {
this.amount = amount;
}

public BigDecimal getResult() {
return result;
}

public void setResult(BigDecimal result) {
this.result = result;
}
}

豆子classConverterBean.java

package com.vishal;

import java.math.BigDecimal;

public class ConverterBean {
private BigDecimal INR = new BigDecimal(0.02291);
private BigDecimal USD = new BigDecimal(46.58);

public BigDecimal convert(String fromCurrency, String toCurrency, BigDecimal     amount) {
if (fromCurrency.equals(toCurrency)) {
  return amount;
}

BigDecimal toRate = findRate(toCurrency);
BigDecimal result = toRate.multiply(amount);
return result.setScale(2, BigDecimal.ROUND_UP);
}

public BigDecimal findRate(String currencySymbol) {
  BigDecimal returnValue = null;

  if (currencySymbol.equals("INR")) {
      returnValue=INR;
  }

  if (currencySymbol.equals("USD")) {
    returnValue=USD;
  }
  return returnValue;  
  }
  }

Struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts  Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package extends="struts-default" name="/">
<action name="convert">
  <result name="success">/result.jsp</result>
</action>
</package>
</struts>

Index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<body>
<s:form action="convert">
  Enter amount to convert: <s:textfield default="0" name="amount"/>
  <br/><br/>

  From:
  <s:textfield name="from"/>
  <br/><br/>

  To:
  <s:textfield name="to"/>
  <br/><br/>

  <s:submit value="submit"/>
  </s:form>
 </body>
</html>

Result.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>

<body>    
        <h2>Hello</h2>hi
        <s:property value="result" default="0" />

</body>   
</html>

评论太多了,所以这是你的代码审查。

ConverterAction

  • 不要导入不需要的东西。
  • 把重要的东西放在最上面(getters 和 setters 不重要)。
  • 缩进和间距保持一致
package com.vishal;

import com.opensymphony.xwork2.ActionSupport;
import java.math.BigDecimal;

public class ConverterAction extends ActionSupport {
  private String from;
  private String to;
  private BigDecimal amount;
  private BigDecimal result;

  public String excecute() {
    ConverterBean n = new ConverterBean();
    result = n.convert(from, to, amount);
    return SUCCESS;
  }

  public String getFrom() {
    return from;
  }

  public void setFrom(String from) {
    this.from = from;
  }

  public String getTo() {
    return to;
  }

  public void setTo(String to) {
    this.to = to;
  }

  public BigDecimal getAmount() {
    return amount;
  }

  public void setAmount(BigDecimal amount) {
    this.amount = amount;
  }

  public BigDecimal getResult() {
    return result;
  }

  public void setResult(BigDecimal result) {
    this.result = result;
  }
}

ConverterBean

  • 使用描述性很强的变量名。
  • 在语言关键字周围使用空格。
  • 不要插入随机空行。
  • Return早.
  • 处理所有案件。
package com.vishal;

import java.math.BigDecimal;

public class ConverterBean {
  private BigDecimal INR = new BigDecimal(0.02291);
  private BigDecimal USD = new BigDecimal(46.58);

  public BigDecimal convert(String fromCurrency, String toCurrency, BigDecimal amount) {
    if (fromCurrency.equals(toCurrency)) {
      return amount;
    }

    BigDecimal toRate = findRate(to);
    BigDecimal result = toRate.multiply(amount);
    return result.setScale(2, BigDecimal.ROUND_UP);
  }

  public BigDecimal findRate(String currencySymbol) {
      BigDecimal returnValue = null;

      if (currencySymbol.equals("INR")) {
          return INR;
      }

      if (currencySymbol.equals("USD")) {
        return USD;
      }

      throw new UnsupportedOperation("Unknown Conversion");
  }
}

JSP

  • Struts 2 个属性通过其 属性 名称公开,例如小写。
  • 格式化很重要。
  • 操作不是类名,它们是操作名称:您目前甚至没有有效的 struts.xml,正如您的服务器日志必须指出的那样。
<!DOCTYPE html>
<html>
  <body>
    <s:form action="convert">
      Enter amount to convert: <s:textfield default="0" name="amount"/>
      <br/><br/>

      From:
      <s:textfield name="from"/>
      <br/><br/>

      To:
      <s:textfield name="to"/>
      <br/><br/>

      <s:submit value="submit"/>
    </s:form>
  </body>
</html>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
  <package extends="struts-default" name="/">
    <action name="convert">
      <result name="success">/result.jsp</result>
    </action>
  </package>
</struts>

(记忆中的配置,有点久了)

当您第一次请求该页面时,您也会遇到问题,因为没有任何值,所以到处都是 null