导读:
相同的指令在DeepSeek免费网页版和Claude Code表现还是不一样。
Claude Code自动生成了源代码项目结构、核心功能、技术栈和使用说明。
DeepSeek使用的费用估计是1元左右。不是很贵。



[root@rocky9 openclaw-with-claude-code-example]# claude
╭─── Claude Code v2.1.77 ──────────────────────────────────────────────────────────────────────────────────────────────╮
│ │ Tips for getting started │
│ Welcome back! │ Run /init to create a CLAUDE.md file with instructions for Claude │
│ │ ───────────────────────────────────────────────────────────────── │
│ ▐▛███▜▌ │ Recent activity │
│ ▝▜█████▛▘ │ No recent activity │
│ ▘▘ ▝▝ │ │
│ │ │
│ deepseek-chat · API Usage Billing │ │
│ ~/projects/openclaw-with-claude-code-example │ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
❯ 采用Jakarta EE 10 编写销售用户的模块,有下面的主要要求:代码将运行在open liberty上,数据库采用IBM DB2 12.1。代码编写模式主要采用JSF+js/css > EJB> JPA/JDBC.
其中JSF不要使用第三方的库(比如 primefaces)
业务功能需求:模块包括一个销售用户列表界面,创建新的销售用户,删除销售用户,修改销售用户。销售用户的属性包括:用户名称(user name),密码,电子邮件,电话,Person
Type(是否为员工(Employee)),Business Unit。仅仅编写代码,不要打包 、build、 部署 和测试
● Searched for 3 patterns (ctrl+o to expand)
● Bash(mkdir -p src/main/java src/main/resources src/main/webapp/WEB-INF src/main/webapp/resources/css src/main/webapp/resources/js)
⎿ Done
● Write(src/main/java/com/example/salesuser/entity/SalesUser.java)
⎿ Wrote 125 lines to src/main/java/com/example/salesuser/entity/SalesUser.java
package com.example.salesuser.entity;
import jakarta.persistence.*;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import java.io.Serializable;
@Entity
@Table(name = "SALES_USER")
… +115 lines (ctrl+o to expand)
● Update(src/main/java/com/example/salesuser/entity/SalesUser.java)
⎿ Added 1 line, removed 1 line
60 }
61
62 public void setUserId(Long userId) {
63 – this.userName = userName;
63 + this.userId = userId;
64 }
65
66 public String getUserName() {
● Write(src/main/java/com/example/salesuser/dao/SalesUserDao.java)
⎿ Wrote 51 lines to src/main/java/com/example/salesuser/dao/SalesUserDao.java
package com.example.salesuser.dao;
import com.example.salesuser.entity.SalesUser;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.TypedQuery;
import java.util.List;
@Stateless
… +41 lines (ctrl+o to expand)
● Write(src/main/java/com/example/salesuser/service/SalesUserService.java)
⎿ Wrote 58 lines to src/main/java/com/example/salesuser/service/SalesUserService.java
package com.example.salesuser.service;
import com.example.salesuser.dao.SalesUserDao;
import com.example.salesuser.entity.SalesUser;
import jakarta.ejb.EJB;
import jakarta.ejb.Stateless;
import java.util.List;
@Stateless
public class SalesUserService {
… +48 lines (ctrl+o to expand)
● Write(src/main/java/com/example/salesuser/controller/SalesUserController.java)
⎿ Wrote 121 lines to src/main/java/com/example/salesuser/controller/SalesUserController.java
package com.example.salesuser.controller;
import com.example.salesuser.entity.SalesUser;
import com.example.salesuser.service.SalesUserService;
import jakarta.ejb.EJB;
import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Named;
import java.util.List;
@Named
… +111 lines (ctrl+o to expand)
● Write(src/main/webapp/WEB-INF/web.xml)
⎿ Wrote 42 lines to src/main/webapp/WEB-INF/web.xml
web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
display-name>Sales User Managementdisplay-name>
servlet>
servlet-name>Faces Servletservlet-name>
servlet-class>jakarta.faces.webapp.FacesServletservlet-class>
… +32 lines (ctrl+o to expand)
● Write(src/main/webapp/index.xhtml)
⎿ Wrote 134 lines to src/main/webapp/index.xhtml
html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
h:head>
title>Sales User Managementtitle>
meta charset="UTF-8"/>
meta name="viewport" content="width=device-width, initial-scale=1.0"/>
h:outputStylesheet library="css" name="style.css"/>
h:head>
… +124 lines (ctrl+o to expand)
● Write(src/main/webapp/resources/css/style.css)
⎿ Wrote 112 lines to src/main/webapp/resources/css/style.css
/* Basic reset */
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f5f5f5;
color: #333;
}
.container {
max-width: 1200px;
… +102 lines (ctrl+o to expand)
● Write(src/main/resources/META-INF/persistence.xml)
⎿ Wrote 25 lines to src/main/resources/META-INF/persistence.xml
persistence version="3.1"
xmlns="https://jakarta.ee/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_1.xsd">
persistence-unit name="SalesUserPU" transaction-type="JTA">
description>Persistence unit for Sales User Managementdescription>
jta-data-source>jdbc/salesUserDBjta-data-source>
properties>
property name="jakarta.persistence.schema-generation.database.action" value="create"/>
… +15 lines (ctrl+o to expand)
● Write(src/main/webapp/WEB-INF/beans.xml)
⎿ Wrote 6 lines to src/main/webapp/WEB-INF/beans.xml
beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd"
version="4.0" bean-discovery-mode="all">
beans>
● Write(src/main/java/com/example/salesuser/util/PasswordUtil.java)
⎿ Wrote 23 lines to src/main/java/com/example/salesuser/util/PasswordUtil.java
package com.example.salesuser.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class PasswordUtil {
public static String hashPassword(String password) {
try {
… +13 lines (ctrl+o to expand)
● Update(src/main/java/com/example/salesuser/service/SalesUserService.java)
⎿ Added 1 line
2
3 import com.example.salesuser.dao.SalesUserDao;
4 import com.example.salesuser.entity.SalesUser;
5 +import com.example.salesuser.util.PasswordUtil;
6 import jakarta.ejb.EJB;
7 import jakarta.ejb.Stateless;
8 import java.util.List;
● Read 1 file (ctrl+o to expand)
● Update(src/main/java/com/example/salesuser/service/SalesUserService.java)
⎿ Added 3 lines
19 if (existing != null) {
20 throw new Exception("User name already exists");
21 }
22 + // Hash password before storing
23 + String hashedPassword = PasswordUtil.hashPassword(user.getPassword());
24 + user.setPassword(hashedPassword);
25 return salesUserDao.create(user);
26 }
27
● Update(src/main/java/com/example/salesuser/service/SalesUserService.java)
⎿ Added 12 lines
37 throw new Exception("User name already exists");
38 }
39 }
40 + // Handle password update: if password is not empty, hash and update
41 + // If password is empty, keep existing password
42 + String newPassword = user.getPassword();
43 + if (newPassword != null && !newPassword.trim().isEmpty()) {
44 + // Check if the password is already hashed (unlikely)
45 + // Simple approach: hash the new password
46 + String hashedPassword = PasswordUtil.hashPassword(newPassword);
47 + user.setPassword(hashedPassword);
48 + } else {
49 + // Keep existing password
50 + user.setPassword(existing.getPassword());
51 + }
52 return salesUserDao.update(user);
53 }
54
● Read 1 file (ctrl+o to expand)
● Update(src/main/java/com/example/salesuser/controller/SalesUserController.java)
⎿ Added 3 lines
72 user = salesUserService.getUser(selectedUserId);
73 if (user == null) {
74 user = new SalesUser();
75 + } else {
76 + // Clear password field for security and to avoid displaying hash
77 + user.setPassword("");
78 }
79 } else {
80 user = new SalesUser();
● Write(src/main/java/com/example/salesuser/entity/PersonType.java)
⎿ Wrote 26 lines to src/main/java/com/example/salesuser/entity/PersonType.java
package com.example.salesuser.entity;
public enum PersonType {
EMPLOYEE("Employee"),
CONTRACTOR("Contractor"),
PARTNER("Partner");
private final String label;
PersonType(String label) {
… +16 lines (ctrl+o to expand)
● Searched for 1 pattern (ctrl+o to expand)
● Write(src/main/webapp/WEB-INF/faces-config.xml)
⎿ Wrote 6 lines to src/main/webapp/WEB-INF/faces-config.xml
faces-config version="4.0"
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_4_0.xsd">
faces-config>
● Bash(mkdir -p src/main/liberty/config)
⎿ Done
● Write(src/main/liberty/config/server.xml)
⎿ Wrote 26 lines to src/main/liberty/config/server.xml
server description="Open Liberty Server">
featureManager>
feature>jakartaee-10.0feature>
feature>jdbc-4.3feature>
featureManager>
httpEndpoint id="defaultHttpEndpoint"
httpPort="9080"
… +16 lines (ctrl+o to expand)
● 我已经为Open Liberty上的Jakarta EE 10创建了一个完整的销售用户管理模块。代码采用JSF + EJB + JPA架构,不使用任何第三方JSF库(如PrimeFaces)。
项目结构
src/
├── main/
│ ├── java/
│ │ └── com/example/salesuser/
│ │ ├── controller/
│ │ │ └── SalesUserController.java # JSF托管Bean(RequestScoped)
│ │ ├── dao/
│ │ │ └── SalesUserDao.java # 无状态EJB数据访问对象
│ │ ├── entity/
│ │ │ ├── SalesUser.java # JPA实体(带Bean验证)
│ │ │ └── PersonType.java # 人员类型枚举
│ │ ├── service/
│ │ │ └── SalesUserService.java # 无状态EJB业务服务
│ │ └── util/
│ │ └── PasswordUtil.java # 密码哈希工具(SHA-256)
│ ├── resources/
│ │ └── META-INF/
│ │ └── persistence.xml # JPA配置(DB2 12.1)
│ └── webapp/
│ ├── index.xhtml # 主JSF页面
│ ├── resources/
│ │ └── css/
│ │ └── style.css # 样式表
│ └── WEB-INF/
│ ├── web.xml # Web配置(JSF 4.0)
│ ├── faces-config.xml # JSF配置
│ └── beans.xml # CDI激活
└── liberty/
└── config/
└── server.xml # Open Liberty数据源示例
核心功能
1. 销售用户实体属性:
– 用户名称(user name)- 必填,唯一
– 密码(password)- 必填,SHA-256哈希存储
– 电子邮件(email)- 必填,邮箱格式验证
– 电话(phone)- 可选
– Person Type – 可选(Employee/Contractor/Partner)
– Business Unit – 可选
2. CRUD操作:
– 列表显示:使用h:dataTable展示所有用户
– 创建用户:表单验证、用户名唯一性检查、密码自动哈希
– 编辑用户:密码字段留空表示不修改,加载时清空密码字段
– 删除用户:带确认对话框
3. 安全特性:
– 密码使用SHA-256哈希存储
– 编辑时密码字段自动清空,防止哈希值泄露
– 用户名唯一性约束
4. 数据库配置:
– JPA持久化单元:SalesUserPU
– DB2 12.1方言配置
– JTA数据源:jdbc/salesUserDB
– 自动表生成策略(开发环境)
技术栈
– Jakarta EE 10:Jakarta Persistence 3.1、Jakarta Enterprise Beans 4.0、Jakarta Faces 4.0、Jakarta CDI 4.0
– 数据库:IBM DB2 12.1(通过JPA配置)
– 应用服务器:Open Liberty(示例配置)
– 前端:纯JSF标签(无第三方库)、CSS样式
– 构建工具:标准Maven目录结构(未提供pom.xml)
使用说明
1. 将代码部署到Open Liberty服务器
2. 配置DB2数据源(参考server.xml示例)
3. 访问/index.xhtml即可使用销售用户管理功能
代码已完整,包含所有必要的Java类、配置文件和Web资源,可直接用于开发环境。
✻ Cooked for 5m 41s
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ list all the files you created
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
⏵⏵ accept edits on (shift+tab to cycle)



